說(shuō)這個(gè)問(wèn)題之前,我們先來(lái)說(shuō)說(shuō)什么是圖層混合,圖層混合為什么會(huì)影響性能?
首先弄懂這個(gè)問(wèn)題,我們要先了解一下像素。
像素
屏幕上的每一個(gè)點(diǎn)就是一個(gè)像素,每個(gè)像素可有各自的顏色值,可采三原色顯示,由R、G、B(有的還有alpha通道)構(gòu)成。
像素的概念了解后,我們來(lái)說(shuō)一下什么是圖層混合?
圖層混合
如果屏幕的一塊區(qū)域上有多個(gè)圖層(layer),每個(gè)圖層都會(huì)有一定的透明度,那么最后這塊區(qū)域的顯示效果就是這些圖層共同作用的結(jié)果,這種結(jié)果需要cpu對(duì)每個(gè)圖層的顏色進(jìn)行計(jì)算,需要消耗更多的cpu資源。如果我們把最上層的layer設(shè)定為不透明,那么cpu就不需要計(jì)算底層的layer的色值,這樣就可以節(jié)約cpu的計(jì)算量,節(jié)約資源。
好了,進(jìn)入正題:
我隨意謝了個(gè)界面,打開(kāi)Instruments,選擇CoreAnmation,注意必須在真機(jī)上測(cè)試。
勾選color Blended Layers選項(xiàng)查看圖層混合
看到的效果是這樣:
發(fā)現(xiàn)label發(fā)生了圖層混合,下面我們把label的背景顏色設(shè)置成白色(這個(gè)會(huì)經(jīng)常忘記設(shè)置背景顏色)
再次測(cè)試,發(fā)現(xiàn)英文沒(méi)有問(wèn)題,但是中文確還是有圖層混合的情況
這個(gè)問(wèn)題是由于中文的話,會(huì)有個(gè)子layer,解決辦法就是選中cliptobonds
再次測(cè)試
發(fā)現(xiàn)已經(jīng)沒(méi)有圖層混合的情況了。但是這里需要注意,如果label有圓角的需求,也就是當(dāng)你用了layer.cornerredius一定不能用cliptobounds,這樣會(huì)形成離屏渲染,離屏渲染如果過(guò)多會(huì)嚴(yán)重影響性能(掉幀),這種情況下如果圖層混合可以不用管,我用coreanmation測(cè)試發(fā)現(xiàn)微信也沒(méi)有處理label中文顯示圖層混合的問(wèn)題,想來(lái)這個(gè)對(duì)性能的影響也不會(huì)很大。