本篇我们记录一下几个问题
1、什么是离屏渲染
2、离屏渲染是在哪一步进行的
3、离屏渲染的影响
4、哪些操作会造成离屏渲染
5、离屏渲染的优化
6、特殊的离屏渲染
7、UILabel的特殊之处
1、什么是离屏渲染
2、离屏渲染是在哪一步进行的
不能直接显示为 frameBuffer,会先开辟一块内存空间由GPU合成显示相关的视图,需要显示的时候 再合成frameBuffer,是需要上下文来回切换,耗费性能
3、离屏渲染的影响
- 需要额外开辟一块内存空间
- 上下文切换 耗费性能
4、哪些操作会造成离屏渲染
iOS模拟器开启Color Off-screen rendered,之后 =触发离屏渲染的会显示黄色
-
光栅化
将试图缓存为一个bitmap的位图,使用的时候直接获取位图,开发过程中基本没有使用场景
-
mask遮罩
mask是在视图的上层添加一个layer,显示的时候需要主视图 + mask综合显示 触发离屏渲染
-
阴影
阴影是在主视图的底下 处理的,显示也需要综合于主视图,综合显示
-
抗锯齿
这个与图片的显示模式有关系,若是图片显示模式为scaleToFill,就不会触发离屏渲染
-
不透明度
单纯的设置不透明度是不会触发离屏渲染的,但是若是主视图上有子视图,我们设置主视图的不透明度小于1,就会触发离屏渲染
-
圆角
UILabel设置了 layer.backgroudColor才会触发
-
贝塞尔曲线,不会触发离屏渲染 但是也不是最优解,这个会增加绘制成本,最优解是在原图片上加一个透明的圆角层
5、离屏渲染的优化
-
阴影的优化
设置layer的shadowPath
-
圆角设置注意事项,仅设置圆角不会触发离屏渲染
imageView设置了backgroudColor后会触发离屏渲染
6、特殊的离屏渲染,xcode检测不出来
drawRect方法,这个地方会重新生成backing srore,增加绘制成本
7、UILabel的特殊之处
imageview和label显示出来的颜色分别为 green和red
一般的uiview我们设置backgroudcolor设置的是 contents后边的颜色,layer.backgroudcolor是contents的颜色,
但是UILabel则不然,我们设置backgroudColor是contents的颜色,layer.backgroudcolor是底部的颜色
图中所示的 backgroudColor、contents、borderWidth&borderColor,任意设置两个都会触发离屏渲染