문제

UIView 하위 클래스 안에 있습니다 (아래 코드의 CustomView).

UIIMAGEVIEW 서브 클래스 (continerView)의 이미지 주위에 테두리를 그립니다. 이에 대한 핵심 그래픽 코드는 내부에 있습니다 drawInRect: 서브 클래스에서.

핵심 애니메이션 전환은 플립이지만, 그려지면 핵심 그래픽 코드가 사용되지 않습니다. drawInRect: Calayer에게 내 렌더링 된 이미지를 제공하도록 호출되지 않았습니다.

대신 코어 그래픽 도면이 발생하지 않고 한 이미지에서 다른 이미지로 애니메이션을 얻습니다.

Calayer가 원시 이미지 대신 코어 그래픽 도면을 사용하여 애니메이션을 허용하는 방법은 무엇입니까?

[CustomView beginAnimations:@"transitionNextImage" context:nil];
[CustomView setAnimationDuration:2.0];
[containerView setImage:image];
[CustomView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:YES];
[containerView setImage:differentImage];
[CustomView commitAnimations];
도움이 되었습니까?

해결책

당신은 구현 중입니다 drawRect:, 아니다 drawInRect:, 오른쪽? 또한이 전환 이외의 상황에서 실제로 작동하는지 확인 했습니까?

당신은 당신의 붙여 넣을 수 있습니까? drawRect:구현? uiimageview가 의존하는 대신 층의 내용을 직접 설정하는 것이 두렵습니다. drawRect: 그것을하기 위해, 그것은 당신의 의미입니다 drawRect: 작동하지 않습니다.

사실, 이것이 실제로 얼마나 간단한지를 감안할 때 uiimageview 대신 uiview 서브 클래스 만 권장합니다. 도면의 이미지를 스케일링 할 때 종횡비를 보존하는 수학은 매우 간단합니다.

또 다른 옵션은 물론 UIIMAGEVIEW를 서브 클래스하고 그냥 무시하는 것입니다. setImage: 첫 번째를 기반으로 새 이미지를 만들지 만 그 주위에 테두리를 그리는 다음 슈퍼로 전달합니다. 그렇게하면 아무것도 할 필요가 없습니다 drawRect: 조금도.

다른 팁

네 그래 제가 구현하고있었습니다 drawRect:, 그리고 네, 내 그림은 전환 밖에서 작동했습니다.

문제는 그 것입니다 drawRect: 내부 a UIImageView Calayer가 그림을 위해 서브 클래스를 불러 내지 않았습니다.

그래서이 서브 클래스의 부모를 UIView, 이미지에 대한 내 자신의 속성을 구현하고 애니메이션도 조정했습니다.

애니메이션 containerView 위의 코드에서 바닐라로 변경되었습니다. UIView 사례. 이를 수용하기 위해 애니메이션 코드를 약간 변경해야했습니다.

[CustomView beginAnimations:@"transitionNextImage" context:nil];
[CustomView setAnimationDuration:2.0];
[containerView addSubview:aViewSubclass];
[CustomView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:YES];
[aViewSubclass removeFromSuperview];
[containerView addSubview:anotherInstanceOfTheViewSubclass];
[CustomView commitAnimations];

즉, 이러한 종류의 전환에 대한 Apple의 문서에서 :

전환 중 뷰 모양을 변경하려면 (예를 들어, 한 뷰에서 다른 뷰로 뒤집기) 다음과 같이 컨테이너 뷰, uiview 인스턴스를 사용하십시오.

  1. 애니메이션 블록을 시작하십시오.
  2. 컨테이너 뷰에서 전환을 설정하십시오.
  3. 컨테이너 뷰에서 하위 뷰를 제거하십시오.
  4. 컨테이너 뷰에 새 하위 뷰를 추가하십시오.
  5. 애니메이션 블록을 커밋하십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top