您需要能够访问您正在运行的动画的特定实例,以协调每个动画的完成操作。在你的例子中,[self doAnimation]不会让我们看到任何动画,所以你的问题不能用你提供的东西“解决”。
有几种方法可以实现您想要的效果,但这取决于您正在处理的动画类型。
在其他的答案所指出的,在视图上的动画之后执行代码的最常见的方式是通过一个completionBlock中:animateWithDuration:completion:
另一种方式来处理属性变化的动画是的范围内设置一个CATransaction
完成块交易。
但是,这些特定的方法基本上是为动画属性或层次结构更改视图。当您的动画涉及视图及其属性时,这是推荐的方式,但不包括您可能在iOS中找到的所有类型的动画。从你的问题来看,目前还不清楚你使用的是什么类型的动画(或者如何,或者为什么),但是如果你实际触及CAAnimations(关键帧动画或一组动画)的实例,你会通常做的是建立一个委托:
CAAnimation *animation = [CAAnimation animation];
[animation setDelegate:self];
[animatedLayer addAnimation:animation forKeyPath:nil];
// Then implement the delegate method on your class
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
// Do post-animation work here.
}
的一点是,你如何完成处理实现取决于你的动画是如何实现的。在这种情况下,我们看不到后者,所以我们无法确定前者。
您的问题无法从您提供的内容中解决。请参阅下面的答案,以获得您想要的行为,您必须能够看到执行动画的代码(此处由doAnimation封装)。 – isaac 2013-05-03 22:54:23