您需要能够访问正在运行的动画的特定实例,以便协调每个动画的完成操作。在您的示例中, [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.
}
关键是,完成处理的实现方式取决于动画的实现方式。在这种情况下我们看不到后者,因此我们无法确定前者。