上节末尾提到 transition 的动画时说到, ios 常用的 animation 有 UIView 的 animation blocks 和 core animation (CALayer) 两种, 一般简单的动画 UIView 都能满足, CALayer 的动画更高效,也能达到更复杂的动画,比如三维的变换, 每一个view 都有 layer 这一属性,CALayer 是对 view 的 layer 设置动画,当然使用 CAlayer 需要引入 core animation framework。
CALayer 的高效也体现在它不阻塞主线程,换句话说,用 UIView.animation 做一个2s的动画, 这2s之间点击页面上的其他按钮都没有响应, 要等动画做完才可以, 而CALayer 的 basicAnimation 不会阻塞主线程,所以有这种需求时可以考虑CALayer。
animation blocks 有什么好处呢? 下面以一个例子解释一下:
下面的 swift 函数实现的事在当前ViewController中加一个Lable, 做了一系列动画之后就从View中拿掉。这期间用animation blocks做了2个动画,一个做放大,放大到1.2倍;做完放大做逐渐消失,alpha 值从 1 到 0,写法类似于js的callback,第二个动画也完成之后,把 lable 从当前 View 中 remove 掉。
func showLable(name : String, parentView : UIViewController, center :