gpt4 book ai didi

iphone - bool 参数在 animateWithDuration :animations:completion: 中究竟做了什么

转载 作者:IT老高 更新时间:2023-10-28 11:27:15 24 4
gpt4 key购买 nike

我提到了DOC它说:

completion
... This block has no return value and takes a single Boolean argument that indicates whether or not the animations actually finished before the completion handler was called. ...

但是我发现不管你是否使用bool参数,completion: block 总是会在animations: block 之后执行。就像下面显示的两个简单的基于 block 的动画代码片段一样,它们都在做同样的事情。

[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 参数究竟是什么?
  • 或者什么情况下会用到?

最佳答案

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

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

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

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

关于iphone - bool 参数在 animateWithDuration :animations:completion: 中究竟做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com