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