iOS離屏渲染

1襟士、渲染簡介

正常渲染:APP中的數(shù)據(jù)經(jīng)過CPU和GPU的計(jì)算處理后,形成幀數(shù)據(jù)并將結(jié)果存放在幀緩存區(qū)魂贬,需要顯示時(shí)從幀緩存區(qū)拿取數(shù)據(jù)經(jīng)過數(shù)模轉(zhuǎn)換并渲染到屏幕上的過程(數(shù)據(jù)特點(diǎn)是即用即丟且只能存放一組數(shù)據(jù))

離屏渲染:APP需要顯示的畫面涉及到多個(gè)layer混合處理密浑,因?yàn)閹彺鎱^(qū)只能存放一組數(shù)據(jù)無法同時(shí)對(duì)多組數(shù)據(jù)進(jìn)行處理時(shí),系統(tǒng)會(huì)自動(dòng)將這多組的數(shù)據(jù)存放至離屏緩存區(qū)并混合處理后形成一組數(shù)據(jù)再重走正常渲染流程的過程粗井。

2尔破、離屏渲染的利弊

劣勢:離屏渲染加大了系統(tǒng)的負(fù)擔(dān)街图,造成性能上的損耗。主要表現(xiàn)在以下幾個(gè)方面懒构。

離屏渲染需要額外的存儲(chǔ)空間餐济,存儲(chǔ)空間大小的上限是2.5倍的屏幕像素大小,一旦超過胆剧,則無法使用離屏渲染

一旦因?yàn)殡x屏渲染導(dǎo)致最終存入幀緩存區(qū)的時(shí)候絮姆,已經(jīng)超過了16.67ms,則會(huì)出現(xiàn)掉幀的情況

優(yōu)勢:雖然離屏渲染會(huì)需要多開辟出離屏緩存區(qū)來存儲(chǔ)中間狀態(tài)秩霍,但是對(duì)于多次出現(xiàn)在屏幕上的數(shù)據(jù)滚朵,可以提前渲染好,從而達(dá)到復(fù)用的目的前域,這樣CPU/GPU就不用做一些重復(fù)的計(jì)算(光柵化)

開發(fā)的特殊需求背景下韵吨,比如 一些動(dòng)畫效果和顯示效果匿垄,需要多圖層以及離屏緩存區(qū)保存中間狀態(tài),這種情況下就不得不使用離屏渲染(圓角归粉、陰影椿疗、高斯模糊等)。

3糠悼、離屏渲染監(jiān)控

Xcode模擬器提供給開發(fā)者一個(gè)工具届榄,可如下圖進(jìn)行開啟,開啟狀態(tài)觸發(fā)離屏渲染的視圖會(huì)被標(biāo)記顏色

4倔喂、日常開發(fā)避免非必要離屏渲染

日常開發(fā)時(shí)總是聽到有人說盡量避免使用圓角來避免離屏渲染的問題產(chǎn)生铝条。那么經(jīng)過上文我們可以得知這一說法并不完全正確。

我們先看一下圓角方法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.

設(shè)置cornerRadius大于0時(shí)席噩,只會(huì)為layer的backgroundColor和border設(shè)置圓角班缰,而不會(huì)對(duì)layer的contents設(shè)置圓角,除非同時(shí)設(shè)置了layer.masksToBounds為true(對(duì)應(yīng)UIView的clipsToBounds屬性)悼枢。

針對(duì)這一描述我們可以觀看以下示例:

在界面上顯示一個(gè)設(shè)置了圖片的按鈕埠忘,雖然顯示時(shí)會(huì)涉及到按鈕背景和圖片的分別渲染,但是按鈕視圖顯示到屏幕上時(shí)系統(tǒng)實(shí)質(zhì)上是先將按鈕背景渲染到屏幕上馒索,然后再將圖片渲染到屏幕上來實(shí)現(xiàn)這一按鈕的正秤ǘ剩現(xiàn)實(shí)的。所以并沒有出現(xiàn)圖層混合所以也不會(huì)出現(xiàn)離屏渲染現(xiàn)象绰上。

當(dāng)我們對(duì)按鈕進(jìn)行圓角切割時(shí)旨怠,這樣按鈕視圖顯示到屏幕上時(shí)系統(tǒng)必須要先將按鈕背景色數(shù)據(jù)處理完成,然后在背景上添加圖片數(shù)據(jù)渔期,最后再對(duì)兩組數(shù)據(jù)進(jìn)行切割處理后才能形成有效的位圖數(shù)據(jù)渲染到屏幕上运吓。所以會(huì)出現(xiàn)圖層混合也就會(huì)導(dǎo)致離屏渲染現(xiàn)象出現(xiàn)渴邦。

那么如何避免這一情況出現(xiàn)呢?拘哨?谋梭?

我們可以設(shè)置按鈕背景色與父視圖顏色相同,然后單獨(dú)對(duì)按鈕的圖片進(jìn)行切割就可以避免離屏渲染情況出現(xiàn)了倦青。

上述只是對(duì)離屏渲染情況自己的一些理解瓮床,如果有什么不足和錯(cuò)誤歡迎指正補(bǔ)充??????

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市产镐,隨后出現(xiàn)的幾起案子隘庄,更是在濱河造成了極大的恐慌,老刑警劉巖癣亚,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丑掺,死亡現(xiàn)場離奇詭異,居然都是意外死亡述雾,警方通過查閱死者的電腦和手機(jī)街州,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玻孟,“玉大人唆缴,你說我怎么就攤上這事∈螋幔” “怎么了面徽?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匣掸。 經(jīng)常有香客問我趟紊,道長,這世上最難降的妖魔是什么碰酝? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任织阳,我火速辦了婚禮,結(jié)果婚禮上砰粹,老公的妹妹穿的比我還像新娘唧躲。我一直安慰自己,他們只是感情好碱璃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布弄痹。 她就那樣靜靜地躺著,像睡著了一般嵌器。 火紅的嫁衣襯著肌膚如雪肛真。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天爽航,我揣著相機(jī)與錄音蚓让,去河邊找鬼乾忱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛历极,可吹牛的內(nèi)容都是我干的窄瘟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼趟卸,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼蹄葱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锄列,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤图云,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后邻邮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竣况,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年筒严,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帕翻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萝风,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出紫岩,到底是詐尸還是另有隱情规惰,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布泉蝌,位于F島的核電站歇万,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏勋陪。R本人自食惡果不足惜贪磺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诅愚。 院中可真熱鬧寒锚,春花似錦、人聲如沸违孝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雌桑。三九已至喇喉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間校坑,已是汗流浹背拣技。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工千诬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膏斤。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓徐绑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掸绞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泵三,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354