joh*_*ers 15 iphone objective-c uiview
我从来没有想过返回BOOL finished的UIView动画完成处理程序,但是阅读Apple UIView编程指南中的一些示例代码显示了这一点:
completion:^(BOOL finished) {
if (finished) {
Run Code Online (Sandbox Code Playgroud)
这有必要吗?除非动画完成,否则完成块不应该运行,对吧?测试似乎多余.
在该代码段中进行的实际操作非常重要.动画从一个视图转换到另一个视图 - 第一个被替换,然后设置一个布尔值来跟踪当前显示的是哪一个.布尔值在完成块中设置.
[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView)
toView:(displayingPrimary ? secondaryView : primaryView)
duration:1.0
options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
UIViewAnimationOptionTransitionFlipFromLeft)
completion:^(BOOL finished) {
if (finished) {
displayingPrimary = !displayingPrimary;
}
}];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果动画(无论出于何种原因)没有完成,那么视图还没有被交换,你绝对不想翻转它的值displayingPrimary,因为你将有一个不准确的记录你的状态.这就是为什么finished在这种情况下检查标志的原因.
请注意,在该指南中的大多数(如果不是全部)其他代码示例中,不检查该标志 - 这是因为它在那些情况下不重要(在第一个之后运行另一个动画,例如,或者更改某个值不会不依赖于动画的成功完成.
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |