【iOS开发】UI视图离屏渲染

离屏渲染

当前屏幕渲染:指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。

离屏渲染:指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
当我们指定了UI的某些属性,标记为它在位域合成之前不能用于当前屏幕显示的时候就会触发离屏渲染,而离屏渲染的概念起源于GPU层面,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

何时会触发?
  • 圆角(当和maskToBounds一起使用时)
  • 图层蒙版
  • 阴影
  • 光栅化
  • clipsToBounds
为何要避免?

GPU层面上触发多通道渲染管线,产生了额外开销,所以需要避免。
增加GPU工作量有可能超出16.7ms,可能会导致UI的卡顿,掉帧。

Facebook开源的异步绘制框架AsyncDisplayKit

  • 创建新的渲染缓冲区
  • 上下文切换

使UITableVIew滚动更流畅的方案或思路都有些哪些?

CPU和GPU两方面
对于CPU: 在子线程上面进行一些对象的创建调整销毁预排版绘制
GPU上:
当我们需要圆角效果时,可以使用一张中间透明图片蒙上去
使用ShadowPath指定layer阴影效果路径
使用异步进行layer渲染(Facebook开源的异步绘制框架AsyncDisplayKit)
设置layer的opaque值为YES,减少复杂图层合成
尽量使用不包含透明(alpha)通道的图片资源
尽量设置layer的大小值为整形值
直接让美工把图片切成圆角进行显示,这是效率最高的一种方案
很多情况下用户上传图片进行显示,可以让服务端处理圆角
使用代码手动生成圆角Image设置到要显示的View上,利用UIBezierPath(CoreGraphics框架)画出来圆角图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值