iOS:如何检测animation何时完成?

有没有一种方法来检测animation何时完成? 我想在animation完成时调用[nav setTitle:navItem]

下面是我的代码片段。 希望这个问题很清楚,所以我可以得到一个解决scheme,最好是一个例子。

 -(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{ if(event.subtype == UIEventSubtypeMotionShake){ NSString *imageUrl = @""; NSString *navItem = @""; int randomNumber = arc4random() % 3; switch (randomNumber) { case 0: imageUrl = @"pic1.png"; navItem = @"txt1"; break; case 1: imageUrl = @"pic2.png"; navItem = @"txt2"; break; case 2: imageUrl = @"pic3.png"; navItem = @"txt3"; break; default: break; } animation.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"pic1.png"], [UIImage imageNamed:@"pic3.png"], [UIImage imageNamed:@"pic2.png"], [UIImage imageNamed:@"pic1.png"], [UIImage imageNamed:@"pic2.png"], [UIImage imageNamed:@"pic3.png"], [UIImage imageNamed:imageUrl], nil]; UIImage *img = [UIImage imageNamed:imageUrl]; [imageview setImage:img]; [animation setAnimationRepeatCount:1]; animation.animationDuration = 1; [animation startAnimating]; [nav setTitle:navItem]; } } 

您可以使用setAnimationDidStopSelector委托。
http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html

 [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; - (void)animationDidStop:(NSString*)animationID finished:(BOOL)finished context:(void *)context { /*Do stuff*/ } 

animation在[animation isAnimating] == NO时完成。

如果您想等到完成但不阻止UI:

 while ([animation isAnimating]) { [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]]; } 
  [self performSelector:@selector(animationFinished) withObject:nil afterDelay:1.0]; -(void)animationFinished { // do stuff } 

那只是假定animation将在你告诉它的时间内完成。