我从来没有考虑过返回BOOL finished
一个UIView动画完成处理程序,但阅读苹果的UIView编程指南中的一些示例代码显示了这一点:
completion:^(BOOL finished) {
if (finished) {
这是必要的吗? 完成块不应该运行,除非动画结束,无论如何,对不对? 测试似乎是多余的。
我从来没有考虑过返回BOOL finished
一个UIView动画完成处理程序,但阅读苹果的UIView编程指南中的一些示例代码显示了这一点:
completion:^(BOOL finished) {
if (finished) {
这是必要的吗? 完成块不应该运行,除非动画结束,无论如何,对不对? 测试似乎是多余的。
实际行动在该代码段正在开展的相当显著。 动画正在转换从一个视图向另一个 - 所述第一被替换,然后一个布尔被设置为跟踪哪些当前显示之一。 布尔在完成块设置。
[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取决于动画的成功完成)。
是的,你真的应该兑现在你的处理器将bool。 用户可能会启动动画,但动画正常完成之前,用户做别的事情提前取消。 这BOOL好让你知道这样的情况。
- 更新 - 只是为了阐述。 试想一下,有些动画在屏幕上移动的视图。 当视图完成移动处理器可能会触发。 假设用户触摸别处导致新的动画,基本上取消正在进行的这第一个。 您可以使用所提供的布尔来检测。