等待动画在iOS中完成?
我想在动画完成后执行doSomethingElse。另一个限制是动画代码可以具有不同的持续时间。我怎样才能做到这一点?谢谢!等待动画在iOS中完成?
-(void) doAnimationThenSomethingElse {
[self doAnimation];
[self doSomethingElse];
}
例如,这不起作用:
animationDuration = 1;
[UIView animateWithDuration:animationDuration
animations:^{
[self doAnimation];
} completion:^(BOOL finished) {
[self doSomethingElse];
}
];
使用块动画:
[UIView animateWithDuration:animationDuration
animations:^{
// Put animation code here
} completion:^(BOOL finished) {
// Put here the code that you want to execute when the animation finishes
}
];
我没有特定的时间,见上面 – 2013-05-03 21:53:23
@ SebastianOberste-Vorth我不明白为什么这会是一个问题。你可以通过任何你想要的时间。 – 2013-05-03 21:53:56
我不知道之前的持续时间,它取决于doAnimation函数,这是随机的 – 2013-05-03 21:55:20
有UIView的文档,向下滚动到
个与块
和
动画浏览
动画视图看到跳到你解释如何制作动画的意见,要在 下的那些页面的不同部分超链接“动画浏览与块“ 阅读方法的名称使他们自我解释
所有这些都有属性animateWithDuration,我不知道代码执行之前 – 2013-05-03 22:03:44
您需要能够访问您正在运行的动画的特定实例,以协调每个动画的完成操作。在你的例子中,[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.
}
的一点是,你如何完成处理实现取决于你的动画是如何实现的。在这种情况下,我们看不到后者,所以我们无法确定前者。
从你的意见,我会建议你:
-(void) doAnimation{
[self setAnimationDelegate:self];
[self setAnimationDidStopSelector:@selector(finishAnimation:finished:context:)];
[self doAnimation];
}
- (void)finishAnimation:(NSString *)animationId finished:(BOOL)finished context:(void *)context {
[self doSomethingElse];
}
当你不是动画的作者,当动画通过使用交易完成块结束,你可以得到一个回调:
[CATransaction setCompletionBlock:^{
// doSomethingElse
}];
// doSomething
您的问题无法从您提供的内容中解决。请参阅下面的答案,以获得您想要的行为,您必须能够看到执行动画的代码(此处由doAnimation封装)。 – isaac 2013-05-03 22:54:23