在回答一张图片在iOS中上屏的过程这一问题之前, 首先了解下iOS的UI渲染的主要过程。其主要包含Layout-> Display->Prepare->Commit四个阶段。
Layout: Layout 阶段主要进行视图构建,包括:LayoutSubviews 方法的重载,addSubview: 方法填充子视图等。
Display: Display 阶段主要进行视图绘制,生成的位图存放在将CALayer包含 contents 属性指向称为 backing store的一块缓存区。
Prepare: Prepare 阶段属于附加步骤,一般处理图像的解码和转换等操作。
Commit: Commit 阶段主要将图层进行打包,并将它们发送至 Render Server。该过程会递归执行,因为图层和视图都是以树形结构存在。
现在问题的答案已经水到渠成了。
1. 读取文件内容, 生成UIImage对象
2. UIImage赋值给UImageView
3. 一个隐式的CATrasaction捕捉到UIImageView 图层树的变化
4. 图片解码, 变为位图,赋值给CALayer的contents
5. 主线程Runloop提交CATransaction,开始进行图像渲染
6. 进行GPU顶点计算、光栅化、片元着色器计算
7. 渲染后的数据进入帧缓冲区。
8. 上屏