CALayer

UIView = 绘制 + 响应触摸事件

UIView 未暴露 CALayer 的接口

图形和几何

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

文本

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

光栅化

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

离屏渲染

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

影响性能在于

图层的属性触发离屏渲染

图层混合

颜色格式

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

图像大小缩放

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