2010-01-22 4 views
5

이미지를 터치 할 때 애니메이션 확대를 시작한 다음 이미지를 놓으면 일반 크기로 다시 크기를 조정합니다. setAnimationBeginsFromCurrentState : YES를 사용하면 애니메이션을 통해 손가락 부분을 들어 올리면 줌 효과가 부드럽고 부드럽습니다.iPhone SDK - 애니메이션이 끝나면 어떻게 알 수 있습니까?

그러나 애니메이션을 완성하기에 충분한 시간 동안 이미지를 터치하면 더 큰 크기의 "잠금"을하고 싶지만 조기에 풀면 정상적으로 축소됩니다.

현재 애니메이션이 실행 중인지 또는 특정 애니메이션이 완료되었는지 여부를 알려주는 방법이 있습니까?

나는 performSelector : afterDelay : touchesStarted에서 호출 할 수 있습니다. 애니메이션의 길이와 동일한 지연으로 취소하고 touchesEnded가 너무 빨리 오면 취소합니다. 그러나 이것이 가장 좋은 방법이라고 생각하지 않습니다. ...?

답변

13
- (void)animateStuff { 
    [UIView beginAnimations:@"animationName" context:nil]; 
    [UIView setAnimationDelegate:self]; 
    [self.view doWhatever]; 
    [UIView commitAnimations]; 
} 

- (void)animationDidStop:(NSString *)animationID 
       finished:(NSNumber *)finished 
       context:(void *)context 
{ 
    if ([finished boolValue]) { 
     NSLog(@"Animation Done!"); 
    } 
} 
+1

이것이 실제로 내가 원하는 것을했다 실현하기 위해 걸 렸어요. animationDidStop은 확대/축소가 어디로 가는지 또는 축소 애니메이션이 대신 수행되는지 여부에 관계없이 호출됩니다. 그러나 finished 값은 원래 지시대로 완료되었는지 여부를 알려줍니다. 예제에서 animationDidStop 본문을 다음과 같이 변경하는 것이 좋습니다. if ([finished boolValue]) { NSLog (@ "Animation Finished!"); } 다음은 완벽한 대답입니다. :) –

0

"+ (void) setAnimationDidStopSelector : (SEL) selector"가 원하는 것을해야한다고 생각합니다. 애니메이션이 완료되면 위임자의 지정된 선택기를 호출합니다.

1

또 다른 가능성은 :

[UIView animateWithDuration:0.3 animations:^{ 

     myView.transform = CGAffineTransformMakeRotation(M_PI); 

}completion:^(BOOL finished) { 

     NSLog(@"Animation complete!"); 
}]; 
관련 문제