我提到了DOC,它说:

completion

但是我发现不管你是否使用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];
             }];

我发现大多数人(包括我)都使用第一个(甚至是苹果官方的doc示例).所以

  • 这里的finished参数到底是用来做什么的?
  • 或者将使用什么情况?

推荐答案

取消动画时,"完成"参数将为"否":通常,当您中断动画以开始另一个动画时(例如,在当前动画结束之前,您已经开始了一个新动画,参数将从当前状态开始),或者您直接取消了动画.

实际上,这会取消当前动画,但仍会调用完成块.如果要链接一系列动画,则希望该链停止,因此只会继续上一个动画已完成的链.

举个例子,假设你有一个游戏,一枚炸弹在屏幕上飞过.如果用户不点击炸弹,炸弹到达边缘时会爆炸.所以你会有一个动画来移动炸弹,你的完成块会有另一个动画来显示爆炸,也许会调用一些方法来减少分数或其他东西.

如果用户点击炸弹,你会取消移动动画,让炸弹无害地飞走.原始完成块仍将被执行,因此需要知道动画是自己完成的,还是被取消的.

Objective-c相关问答推荐

如何从 Cocoa 的 NSDictionary 中获取特定键的值?

我需要在 ARC 中使用 dealloc 方法吗?

如何更改图像中的特定 colored颜色 ?

使用 UIScrollView 用两根手指滚动

从 NSError 返回 NSString

NSMutableDictionary 线程安全

启动 Finder 窗口并 Select 特定文件

无法加载从笔尖引用的图像

具有多个嵌入 segues 的 ContainerView

委托如何在 Objective-C 中工作?

如何在表格视图中的两个单元格之间留出空间?

Select 时 UITableViewCell 复选标记更改

UIBezierPath 减go 路径

iPhone 上 SQLite 的最佳 Cocoa/Objective-C 包装器库

UITextField:键盘出现 timeshift 动视图

单例释放方法产生警告?

深入了解保留周期

ARC 下的 NSString 属性应该是强的还是复制的?

iPhone - dequeueReusableCellWithIdentifier 用法

iOS中的活动生命周期相当于什么?