美文网首页@IT·互联网
iOS离屏渲染的相关问题

iOS离屏渲染的相关问题

作者: 黑炭长 | 来源:发表于2024-03-11 18:39 被阅读0次

本篇我们记录一下几个问题
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.png

drawRect方法,这个地方会重新生成backing srore,增加绘制成本

7、UILabel的特殊之处

截屏2024-03-12 18.10.04.png

imageview和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,任意设置两个都会触发离屏渲染

相关文章

网友评论

    本文标题:iOS离屏渲染的相关问题

    本文链接:https://www.haomeiwen.com/subject/klymzdtx.html