【发布时间】:2015-02-23 05:02:50
【问题描述】:
我在用户交互时运行此动画,有时动画可能会在正在进行的动画完成之前再次运行。我想做的是取消之前的动画并继续新的动画。
[UIView animateWithDuration:duration
delay:0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.bounds = bounds;
}
completion:^(BOOL finished) {
if (finished) {
// Do some cleanup after animating.
}
}];
从视觉上看,这似乎可行,但在我的完成块中,我被告知它在两种情况下都完成了,这导致清理代码过早运行。所以第一个动画的完成块在第二个动画开始后立即运行,finished = YES。我预计它的最终值为NO,第二个(一旦完成)为YES。
有没有办法知道动画是完成了还是被其他人取消了?
旁注:我尝试使用 CABasicAnimation 制作相同的动画,然后我第一次完成 = NO 和第二次完成 YES,所以我得到的行为似乎特定于 animateWithDuration .
这是一个 GIF,显示了上面的代码,持续时间为 10,完成块更新标签。如您所见,每次使用animateWithDuration 调用重新启动动画时,finished 都是YES:
【问题讨论】:
标签: ios objective-c animation uiview