CALayer 隐式动画
隐式动画:属性或内容变化时框架自带的动画效果,即不需要使用类似 UIView Animation
的 API 来触发动画
针对**非 Root Layer **进行支持 animatable 属性的修改会触发隐式动画,比如 backgroundColor, bounds, transform 等等
非 Root Layer:即在 UIView 上手动构建和 add 到 sublayer 的 CALayer
那么相对地,Root Layer 的属性变化仍旧需要手动触发动画。
CALayer 的 position 和 anchorPoint
anchorPoint,是 layer 的锚点,layer 的 position 和 transform 的基准点,范围是 (0, 0)到 (1, 1),
position 是 CALayer 的 anchorPoint 的点在 superLayer 的位置(可以参考 UIView 的 center 属性)
UIImageView 和 UILabel 的 layer
- Image 是通过 CGImageRef 复制给 imageView.layer.contents 来实现的,即没有一个 ImageLayer 的存在。
单纯地设置 layer.cornerRadius 无法实现倒角效果,需要使用 layer.masksToBounds = YES。 - 而 UILabel 则不同,可以通过
[UILabel layerClass]
得知其使用_UILabelLayer
进行渲染
CoreAnimation 的执行线程
后台线程,不会阻塞主线程。
CAKeyFrameAnimation
支持传 CGBezierPath 进行指定特定参数的路径,比如 position 作为 keyPath
CAAnimation 遵循了 NSCopying 协议
意味着在执行动画时是对传入的动画进行 copy 后使用
CAAnimation 与 UIViewAnimation 的区别
- CoreAnimation 并不会改变图层的属性值,UIViewAnimation 会修改真实的图层属性
- 不需要与用户交互时可直接使用 CoreAnimation
网友评论