iOS渲染概述

[复制链接]
发表于 2025-12-9 15:05:07 | 显示全部楼层 |阅读模式
App图形图像的渲染流程

我们在使用UIVIew,Image等组件的时间,是怎么一步步渲染到屏幕上的呢?动画又是怎么实现的?
这里我们先相识几个概念:
1.CPU:CPU重要负责的是逻辑运算,如图像的布局,文本的盘算和排版,图片格式的转换息争码,图像的绘制等。
2.GPU:GPU重要负责图片渲染的运算,它可以把CPU盘算好的表现内容举行纹理渲染,然后把渲染后的内容放入Frame Buffer(帧缓存区)。
注意:GPU相比通用盘算的CPU来讲,其有两个上风:

  • 处理处罚图片盘算的本事要强的多,由于硬件支持T&L(Transform and Lighting,多边形转换与光源处理处罚)
  • 并发本事比CPU也要大 详细对比如下:

3.帧缓存区(双缓冲机制):GPU渲染后的内容会被放到当前屏幕的帧缓存区,不须要额外开发空间,我们知道 iPhone 的屏幕革新率是 60Hz,也就是革新一帧的时间是 16.67 ms, 每隔这段时间视频控制器就会去读一次缓存区的内容来表现。 假如GPU性能出现题目,无法在这段时间将更新渲染结果到帧缓存区,那么下一个时间段照旧会出现上一帧的画面,这就是掉帧。
4.视频控制器:视频控制器会读取帧缓冲区中的内容,GPU在开始时会绘制后缓存区中的内容,然后视频控制器读取完内容后,就会去读取后缓存区的内容,然后GPU再绘制前缓存区的内容。也就是说对前后缓存区的读取是瓜代举行。
其根本渲染流程如下:

GPU中的数据从那里来?

对于iOS的UIKit,答案就是OpenGL和Metal
OpenGL是苹果最初的接纳的渲染框架,其具有跨平台、性能好,包巨细可控等长处,但是随着图形技能的发展,其他也袒暴露很多题目:

  • 当代 GPU 的渲染管线已经发生变革。
  • 不支持多线程操纵。
  • 不支持异步处理处罚。
因此苹果重新操持了Metal框架,其上风如下:

  • 更高效的 GPU 交互,更低的 CPU 负荷。
  • 支持多线程操纵,以及线程间资源共享本事。
  • 支持资源和同步的控制。

在UIKit中,OpenGL的数据重要从以下三个库得到:

  • Core Graphics : 基于Quartz的画图引擎,用于运行时绘制图像
  • Core Image : 处理处罚图像
  • Core Animation : 核心动画和图层渲染本事
那么我们可以知道iOS平台的渲染框架如下:

这时间你大概会有疑问:我们实际开发中似乎并没有直接调用Core Graphics, Core Animation这些框架,而是使用UIIMageView,UIView这些类,那么UIKit框架又是怎么调用Core框架来渲染的呢?
UIKit实现

在先容UIKit是怎么一步步渲染之前,得先相识UIView和CALayer的区别
UIVIew和CALayer

UIVIew和CALayer体现出了职责分离的头脑,此中,UIView负责触摸事故的处理处罚(继续自UIResponder),CALayer负责渲染层(继续自NSObject)。之以是如许操持,是由于Mac体系使用的是AppKit,但是无论是UIKit照旧AppKit,底层渲染都是使用CoreAnimation。
在创建UIVIew时,体系会创建一个layer绑定在View的属性上,当我们修改View的圆角、边框等属性时,着实是UIVIew封装了Layer的修改方法,终极的渲染照旧在Layer上,而触摸相应的实现,照旧有UIVIew来完成。
CoreAnimation流水线

终极的绘制都是通过CALayer来完成,那么Core Animation是怎样一步步将CALayer绘制出来呢?


  • 当App须要变更UI的时间,即视图树(也就是UIVIew)发生变革,这时间对应的图层树(也就是Layer)也会跟随变革,CoreAnimation会提交事件来渲染终极的结果
  • 这时间RenderServer会把数据反序列化为渲染树的内容,然后提交给GPU来渲染
  • GPU收到数据,举行它最善于的图形数据盘算,然后把数据给屏幕
  • 终极,屏幕完成了RGBA在每个像素点上的变更
这里只是一帧的工作,而体系是通过流水线的方式,使得每一帧都能有最新的内容出现,如图:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表