bool参数在animateWithDuration中做了什么:animation:完成:

我提到DOC ,它说:

完成
…这个块没有返回值,只接受一个布尔参数,指出在调用完成处理程序之前animation是否真的完成了。 …

但是我发现无论你使用bool参数还是不行, completion:块总是在animations:块之后执行。 就像下面显示的两个简单的基于块的animation代码片段一样,两者都是一样的。

 [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]; }]; 

而且我发现大多数人(包括我)都使用第一个(甚至是苹果官方文档的例子)。 所以,

  • 这里完全使用的参数是什么?
  • 或者会有什么情况会被使用?

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

实际上这取消了当前animation,但是完成块仍然被调用。 如果您要链接一系列animation,您会希望链条停止,因此您只会继续之前animation的链接。

举一个例子,假设你有一个游戏,一个炸弹在屏幕上飞行。 如果用户没有敲击炸弹,则在到达边缘时会爆炸。 所以你有一个animation来移动炸弹,你的完成块会有另一个animation来显示爆炸,也可能是一个调用某种方法来降低分数的东西。

如果用户点击炸弹,您将取消移动的animation,并将炸弹无害地飞走。 您的原始完成块仍然会被执行,所以您需要知道animation是自己完成还是被取消。