是否有必要测试BOOL在UIView的动画完成处理完了吗?(Is it necessary to t

2019-06-24 02:44发布

我从来没有考虑过返回BOOL finished一个UIView动画完成处理程序,但阅读苹果的UIView编程指南中的一些示例代码显示了这一点:

completion:^(BOOL finished) {
 if (finished) {

这是必要的吗? 完成块不应该运行,除非动画结束,无论如何,对不对? 测试似乎是多余的。

Answer 1:

实际行动在该代码段正在开展的相当显著。 动画正在转换从一个视图向另一个 - 所述第一被替换,然后一个布尔被设置为跟踪哪些当前显示之一。 布尔在完成块设置。

[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView)
    toView:(displayingPrimary ? secondaryView : primaryView)
    duration:1.0
    options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
                UIViewAnimationOptionTransitionFlipFromLeft)
    completion:^(BOOL finished) {
        if (finished) {
            displayingPrimary = !displayingPrimary;
        }
}];

在这种情况下,如果动画(无论何种原因)未完成,则该观点并未经过交换,你绝对不想翻转的价值displayingPrimary ,因为你再有记录不准确你的状态。 这就是为什么finished标志在这种情况下进行检查。

请注意,在大多数(如果不是全部)指南中的其他代码示例,未选中的标志-这是因为它在这些情况下不显著(第一后运行的另一个动画,例如,或者改变一些值没有按“T取决于动画的成功完成)。



Answer 2:

是的,你真的应该兑现在你的处理器将bool。 用户可能会启动动画,但动画正常完成之前,用户做别的事情提前取消。 这BOOL好让你知道这样的情况。

- 更新 - 只是为了阐述。 试想一下,有些动画在屏幕上移动的视图。 当视图完成移动处理器可能会触发。 假设用户触摸别处导致新的动画,基本上取消正在进行的这第一个。 您可以使用所提供的布尔来检测。



文章来源: Is it necessary to test the BOOL finished in a completion handler for UIView animation?