我正在用户交互中运行此动画,有时在当前动画完成之前可能会再次运行该动画。我希望它能取消之前的动画并继续进行新的动画。
[UIView animateWithDuration:duration
delay:0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.bounds = bounds;
}
completion:^(BOOL finished) {
if (finished) {
// Do some cleanup after animating.
}
}];
视觉上看起来似乎没问题,但在我的完成块中告诉我它在两种情况下都已完成,这导致清除代码过早运行。因此,第一个动画的完成块会在第二个开始后立即运行,且finished=YES
。我期望它的finished
值为NO
,而第二个(一旦完成)则为YES
。
有没有办法知道动画是否完成或是否被其他方式取消了?
Sidenote: 我尝试使用CABasicAnimation
进行相同的动画,然后第一次得到的是finished=NO
,第二次得到的是YES
,因此我得到的行为似乎是特定于animateWithDuration
的。
这里有一个GIF,显示了使用持续时间为10且完成块更新标签的上述代码。如您所见,在每次使用animateWithDuration
调用重新启动动画时,finished
都为YES
: