iOS离屏渲染

1、渲染简介

正常渲染:APP中的数据经过CPU和GPU的计算处理后,形成帧数据并将结果存放在帧缓存区,需要显示时从帧缓存区拿取数据经过数模转换并渲染到屏幕上的过程(数据特点是即用即丢且只能存放一组数据)

离屏渲染:APP需要显示的画面涉及到多个layer混合处理,因为帧缓存区只能存放一组数据无法同时对多组数据进行处理时,系统会自动将这多组的数据存放至离屏缓存区并混合处理后形成一组数据再重走正常渲染流程的过程。

2、离屏渲染的利弊

劣势:离屏渲染加大了系统的负担,造成性能上的损耗。主要表现在以下几个方面。

离屏渲染需要额外的存储空间,存储空间大小的上限是2.5倍的屏幕像素大小,一旦超过,则无法使用离屏渲染

一旦因为离屏渲染导致最终存入帧缓存区的时候,已经超过了16.67ms,则会出现掉帧的情况

优势:虽然离屏渲染会需要多开辟出离屏缓存区来存储中间状态,但是对于多次出现在屏幕上的数据,可以提前渲染好,从而达到复用的目的,这样CPU/GPU就不用做一些重复的计算(光栅化)

开发的特殊需求背景下,比如 一些动画效果和显示效果,需要多图层以及离屏缓存区保存中间状态,这种情况下就不得不使用离屏渲染(圆角、阴影、高斯模糊等)。

3、离屏渲染监控

Xcode模拟器提供给开发者一个工具,可如下图进行开启,开启状态触发离屏渲染的视图会被标记颜色

4、日常开发避免非必要离屏渲染

日常开发时总是听到有人说尽量避免使用圆角来避免离屏渲染的问题产生。那么经过上文我们可以得知这一说法并不完全正确。

我们先看一下圆角方法cornerRadius的官方描述:

Setting the radius to a value greater than 0.0 causes the layer to begin drawing rounded corners on its background. By default, the corner radius does not apply to the image in the layer’s contents property; it applies only to the background color and border of the layer. However, setting the masksToBounds property to true causes the content to be clipped to the rounded corners.

设置cornerRadius大于0时,只会为layer的backgroundColor和border设置圆角,而不会对layer的contents设置圆角,除非同时设置了layer.masksToBounds为true(对应UIView的clipsToBounds属性)。

针对这一描述我们可以观看以下示例:

在界面上显示一个设置了图片的按钮,虽然显示时会涉及到按钮背景和图片的分别渲染,但是按钮视图显示到屏幕上时系统实质上是先将按钮背景渲染到屏幕上,然后再将图片渲染到屏幕上来实现这一按钮的正常现实的。所以并没有出现图层混合所以也不会出现离屏渲染现象。

当我们对按钮进行圆角切割时,这样按钮视图显示到屏幕上时系统必须要先将按钮背景色数据处理完成,然后在背景上添加图片数据,最后再对两组数据进行切割处理后才能形成有效的位图数据渲染到屏幕上。所以会出现图层混合也就会导致离屏渲染现象出现。

那么如何避免这一情况出现呢???

我们可以设置按钮背景色与父视图颜色相同,然后单独对按钮的图片进行切割就可以避免离屏渲染情况出现了。

上述只是对离屏渲染情况自己的一些理解,如果有什么不足和错误欢迎指正补充🙏🙏🙏

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352