美文网首页动画
《iOS Core Animation》读书笔记

《iOS Core Animation》读书笔记

作者: Nemocdz | 来源:发表于2017-07-13 03:02 被阅读72次

CALayer

UIView = 绘制 + 响应触摸事件

  • 负责屏幕和显示,不负责触摸事件响应链
  • UIView是其高级封装
  • 和UIView层级一一对应

UIView未暴露CALayer的接口

  • 阴影,圆角,带颜色的边框
  • 3D变换
  • 非矩形范围
  • 透明遮罩
  • 多级非线性动画

图形和几何

frame:外部坐标,父图层坐标,大小为边与xy轴平行能完全容纳图层的最小矩形

bounds:内部坐标,自身坐标,大小为图层大小的矩形

anchorPoint:锚点,旋转基点,左上角{0,0},右下角{1,1}

center(CALayer的position):anchorPoint在父图层的坐标

视觉效果

拉伸过滤

以正确比例和1:1像素显示图片在屏幕上的好处

  • 画质好,像素无压缩拉伸
  • 更好使用内存
  • 性能好,无需额外计算

CAShapeLayer

矢量图像而不是bitmap绘制图层子类

优点:

  • 渲染快速,硬件加速
  • 高效使用内存,占用小
  • 不受边界裁剪,可在边界外绘制
  • 不会出现像素化

CATextLayer

CALayer的子类,几乎拥有UILabel所有绘制特性

渲染快于UILabel,运用Core text

性能调优

动画和图层被单独的渲染服务进程处理

动画发生过程
  1. 布局
  2. 显示
  3. 准备-发送动画数据到渲染服务
  4. 提交-打包图层和动画属性发送到渲染服务
  5. 对所有图层属性计算中间值,设置OpenGL几何形状(纹理化三角形)进行渲染
  6. 在屏幕上渲染可见三角形(GPU执行,前面都在CPU)
可能影响GPU绘制的情况
  • 过多几何结构
  • 重绘-重叠半透明图层
  • 离屏渲染-为屏幕外渲染的图片分配额外内存,切换屏幕内外的绘制上下文
  • 过大的图片
可能影响CPU计算的情况
  • 布局计算-自动布局
  • 视图懒加载-涉及IO的图片显示
  • Core Graphics绘制-drawRect(为支持图层任意绘制需要在内存中创建一个等大小的寄宿图)
  • 解压图片
图像IO
  • 线程加载-合适的后台线程
  • 分辨率交换-移动时低分辨率,静态时加载高分辨率
  • 缓存-考虑因素:合适缓存键、缓存时机、失效、回收
  • 图像格式
文本

尽可能避免改变文本的frame,因为需要重绘

光栅化

将图层及其所有效果绘制成一个屏幕外的图像并缓存,避免运用在内容不断变动的图层上

离屏渲染

在混合复杂效果无法直接渲染时,会通过分步渲染,会把分布渲染的结果临时储存在屏幕外的内存中等待组合渲染

影响性能在于

  • 为临时储存部分渲染结果分配内存
  • 进行将渲染结果从屏幕内-外的上下文切换

图层的属性触发离屏渲染

  • 圆角+maskToBounds
  • 图层蒙版
  • 阴影
图层混合
  • 设定固定不透明的背景颜色
  • 设置layer的opaue属性默认为YES(非view的)
颜色格式

苹果的GPU只解析32bit的颜色格式,其余的格式CPU会先进行颜色格式转换,再让GPU渲染。

图像大小缩放

image和imageView的大小尽量保持一致,避免在改变view大小时重复计算缩放

相关文章

网友评论

    本文标题:《iOS Core Animation》读书笔记

    本文链接:https://www.haomeiwen.com/subject/qxgihxtx.html