为什么我应该使用基于块的animation而不是开始/结束animation?
正如你所知,苹果鼓励我们使用一种叫做基于块的animation的新方法来关于iOS 4.0的animation。
我真的不知道基于块的animation比开始/结束样式animation更好。
性能?
并发?
编码效率和便利性?
那时我也想知道。
但是在使用基于块的animation之后:
[UIView animateWithDuration:0.5 ... ^{ // animated custom view vertically } completion:^{ [UIView animateWithDuration:0.5 ... ^{ // animate the fade in alpha of buttons }]; }];
它以简洁的方式提供了完成处理程序。 您也可以将子animation块彼此嵌套。
通过BeginAnimation / EndAnimation,我不记得如何为完成处理程序执行callback,但通常会执行如下操作:
//开始animation//设置委托//为每个beginAnimation创build委托callback函数
现在想象一下,如果你想嵌套3或4级的animation,比如复制CSS的灯箱效果:
1)淡入灯箱容器
2)展开宽度
3)展开高度
4)淡入淡出
你必须处理一些相当混乱的if-else条件。
您的工作stream程如下所示:
“在这个beginAnimation完成之后,它向我的callback方法发送消息,向下滚动Xcode以查找callback委托方法,然后在callback方法中调用另一个UIView beginAnimation,向后滚动Xcode以查找下一个beginAnimation …”
使用基于块的animation,每个进程都被封装在一个块中,您可以嵌套在另一个块中。 如果你决定要改变顺序的东西出现这样的:
1)淡入灯箱容器
2)这次在宽度之前展开高度
3)这次在高度后展开宽度
4)淡入淡出
随着开始animation的方法,你会开始拉你的头发。
希望有所帮助。
很方便。
通过使用块可以提高性能。 所以这不太可能。 我曾经想过,animation的所有块语法都是通过调用旧方法(或通过调用类似的内部方法来有效地执行这些操作),并在beginAnimation和commitAnimation之间运行块。
所以方便 无论如何,我build议单独使用它。 使用起来更容易,并且可以很容易地嵌套animation并完成任务,因为您不需要创build其他方法来完成调用 – 这只是另一个块。
- animationUITextField指示一个错误的密码
- 在过渡animation中共享两个viewController之间的图像
- 呈现视图控制器模式重置当前视图
- CATransform3DMakeRotationanimation槽零(从-45到+45angular)?
- 如何使我的UIBezierPathanimation与CAShapeLayer?
- UIButtons在animation过程中没有响应 – iOS Swift 3
- 更改UIImageView图像翻转animation的一半
- UITapGestureRecognizer不起作用时,我UIImageViewanimation
- 如何模仿iOS 7上的键盘animation,将“完成”button添加到数字键盘?