Kju*_*uly 65 iphone cocoa-touch objective-c uikit ios
我提到了DOC,它说:
完成
...此块没有返回值,并且接受一个布尔参数,该参数指示在调用完成处理程序之前动画是否实际完成....
但我发现无论你是否使用bool参数,该completion:块总是在animations:块之后执行.就像下面显示的两个简单的基于块的动画代码片段一样,它们都在做同样的事情.
[UIView animateWithDuration:0.3f
                  delay:0.0f
                options:UIViewAnimationCurveEaseInOut
             animations:^{
                 [myView setAlpha:0.0f];
             }
             completion:^(BOOL finished) {
                 [myView removeFromSuperview];
             }];
和
[UIView animateWithDuration:0.3f
                  delay:0.0f
                options:UIViewAnimationCurveEaseInOut
             animations:^{
                 [myView setAlpha:0.0f];
             }
             completion:^(BOOL finished) {
                 if (finished) [myView removeFromSuperview];
             }];
而且我发现大多数人(包括我)都使用第一个(甚至是苹果的官方文档示例).所以,
finished这里使用的参数究竟是什么?jrt*_*ton 94
取消动画时,完成的参数将为NO:通常,当您中断动画以启动另一个动画时(例如,您已经开始新动画,在当前动画结束之前,参数从当前状态开始)或者您已直接取消动画.
实际上,这会取消当前动画,但仍会调用完成块.如果你链接一系列动画,你会希望该链停止,所以你只能继续上一个动画的链完成.
举个例子,假设你有一个炸弹飞过屏幕的游戏.如果用户没有点击炸弹,它会在到达边缘时爆炸.所以你有一个动画来移动炸弹,你的完成块会有另一个动画来显示爆炸,也许是调用一些方法来减少分数或什么.
如果用户点击炸弹,你将取消移动的动画并让炸弹无害地飞走.您的原始完成块仍将被执行,因此您需要知道动画是自己完成还是已取消.
| 归档时间: | 
 | 
| 查看次数: | 12642 次 | 
| 最近记录: |