2009-09-10 4 views
0

iPhone에서 사용자 정의 그려진 CALayer의 회전을 어떻게 멈 춥니 까? 코어 애니메이션 회전을 부드럽게 멈추기

CATransform3D pausetransform = ((CALayer *)[layer presentationLayer]).transform; 
[layer removeAllAnimations]; 
layer.transform = pausetransform; 

바로 다음에, 애니메이션을 정지 층 위로 약간 회전한다. 아마도 pausetransform 값을 설정 한 후에 애니메이션이 잠깐 동안 계속되기 때문일 것입니다.

애니메이션의 대리자 메서드의 layer.transform 값을 설정하면 애니메이션의 시작 위치에 해당 레이어가 올바른 위치로 회전하기 전에 해당 레이어가 잠시 표시됩니다.

답변

1

내가 UIActionSheet로 밝혀졌습니다. [layer removeAllAnimations]을 호출하면 너무 오래 걸려서 애니메이션이 실제로 멈추는 것을 연기했습니다. UIActionSheet의 설정을 - (void) animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)finishednormally 대리자 메서드로 이동하면 이제 회전이 부드럽게 중지됩니다.

0

또 다른 방법은 모두 제거합니다 그러나

[view.layer removeAnimationForKey:@"name of your animation"]; 

를 호출하는 것입니다, 당신은 애니메이션을 설정하는 방법에 따라, 애니메이션은 애니메이션의 다음 반복에서 멈 춥니 다. 예를 들어, 10도 단위로 회전하는 경우 애니메이션은 다음 10도 증가 전에 중지됩니다.

+0

CABasicAnimation을 사용하여 한 번 360 ° 회전시킵니다. removeAllAnimations 또는 removeAnimationForKey를 사용하여 애니메이션을 제거하면 레이어가 layer.transform의 회전으로 돌아갑니다. 그러나 애니메이션이 멈추는 순간에 레이어의 회전을 얻는 방법을 찾을 수 없습니다. 애니메이션이 멈추는 정확한 순간에 레이어의 회전을 설정할 수도 없습니다. 전 또는 직후에 바로 그 작업을 수행 할 수 있습니다. 둘 다 그래픽 결함이 발생합니다. CAAnimation의 다른 하위 클래스가 더 잘 처리됩니까? – kareman

관련 문제