我正在用户交互中运行此动画,有时可能会在正在进行的动画完成之前再次运行动画。我想要做的是取消以前的动画并继续使用新动画。UIView animateWithDuration完成已完成=是,尽管被取消?
[UIView animateWithDuration:duration
delay:0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.bounds = bounds;
}
completion:^(BOOL finished) {
if (finished) {
// Do some cleanup after animating.
}
}];
从外观上看,这似乎是工作,但在我完成块,有人告诉我它在这两种情况下,这将导致清理代码运行过早结束。所以第一个动画的完成块在第二个动画开始后立即运行,完成= YES
。我预计它有一个完成值NO
和第二个(一旦它完成)有YES
。
有没有办法知道动画是否完成或者是否被其他人取消了?
旁注:我试着用CABasicAnimation
做同样的动画,然后我拿完= NO
在第一时间和YES
第二次,所以我得到的行为似乎是专门针对animateWithDuration
。
下面是一个GIF图像,显示上述代码的执行时间为10,完成模块更新标签。正如你所看到的,finished
是YES
每次动画重新启动与animateWithDuration
电话:
感谢这帮助我修复了我的动画故障,因为在iOS 9上始终保持真实。 – malhal 2016-04-18 00:57:04
实际上,更好的方法是检查表示层的边界,然后知道它是否完成。 – malhal 2016-04-18 01:51:26
这就是我最终做的(iOS 9.3,Swift)!谢谢您的帮助。 – 2016-06-09 14:57:29