04-iOS 多媒体技术| Core Animation要点回顾1【CAlayer与UIView树、核心动画、Core Animation渲染原理等】
内容提要
本文介绍了iOS多媒体技术中的Core Animation要点,包括路径动画、基础动画、动画完结检测、暂停和恢复图层动画、烘托流水线。
延伸解读
CALayer 与 UIView 的分工与协作
文章指出,UIView 负责布局、交互和事件处理,而 CALayer 专注于渲染和动画。每个 UIView 背后都有一个对应的 CALayer,但 CALayer 不响应点击事件,且圆角、阴影等特效需直接操作 layer 属性。这种设计实现了责任分离,让 Core Animation 能跨 iOS 和 macOS 复用,也提醒开发者:涉及视觉特效时,需绕过 UIView 的封装直接调整图层。
三组图层树:模型、演示与渲染
Core Animation 维护三组图层树:模型树存储动画目标值,是开发者主要交互的对象;演示树反映屏幕上正在呈现的当前值,可读不可写;渲染树则执行实际动画,由系统私有管理。理解这三者的区别,有助于调试动画过程中的状态获取问题,例如在动画进行时读取模型树得到的是最终值,而演示树才能拿到实时位置。
contents 属性与寄宿图设置要点
CALayer 的 contents 属性类型为 id,但实际应赋值为 CGImageRef,否则图层将显示空白。由于 CGImageRef 是 Core Foundation 类型,直接赋值 UIImage 的 CGImage 会编译错误,需使用 __bridge 转换。此外,contentsGravity 对应 UIView 的 contentMode,用于控制内容在图层边界内的拉伸或适配方式,避免图片变形。
专用图层子类的适用场景
文章列举了多种 CALayer 子类:CAShapeLayer 用矢量路径绘制,内存占用低且缩放不像素化,适合遮罩和路径动画;CATextLayer 基于 Core Text 渲染,性能优于旧版 UILabel;CAGradientLayer 实现颜色渐变;CAEmitterLayer 结合 CAEmitterCell 制作粒子效果;CAReplicatorLayer 可复制子图层并设置位移、颜色偏移,用于加载动画等。选择合适子类能简化实现并提升性能。
Q&A
Core Animation 的主要功能是什么?
Core Animation 提供高帧速率和流畅的动画,不增加 CPU 负担。
CALayer 在 Core Animation 中的作用是什么?
CALayer 是 Core Animation 的核心,负责管理和操作内容,并将其缓存为位图。
Core Animation 如何加速渲染过程?
Core Animation 通过将大部分工作交给专用图形硬件来加速渲染。
Core Animation 支持哪些类型的动画?
Core Animation 支持路径动画、基础动画、动画结束检测、暂停和恢复图层动画。
UIView 和 CALayer 之间有什么关系?
UIView 封装了 CALayer 的部分功能,CALayer 是 UIView 的一个重要组成部分,负责渲染和动画。
CATiledLayer 的用途是什么?
CATiledLayer 用于高效显示大图,通过将大图切割成小块按需加载。