15.3 混合和過度繪制

2018-02-24 15:07 更新

混合和過度繪制

????在第12章有提到,GPU每一幀可以繪制的像素有一個最大限制(就是所謂的fill rate),這個情況下可以輕易地繪制整個屏幕的所有像素。但是如果由于重疊圖層的關系需要不停地重繪同一區(qū)域的話,掉幀就可能發(fā)生了。

????GPU會放棄繪制那些完全被其他圖層遮擋的像素,但是要計算出一個圖層是否被遮擋也是相當復雜并且會消耗處理器資源。同樣,合并不同圖層的透明重疊像素(即混合)消耗的資源也是相當客觀的。所以為了加速處理進程,不到必須時刻不要使用透明圖層。任何情況下,你應該這樣做:

  • 給視圖的backgroundColor屬性設置一個固定的,不透明的顏色
  • 設置opaque屬性為YES

????這樣做減少了混合行為(因為編譯器知道在圖層之后的東西都不會對最終的像素顏色產(chǎn)生影響)并且計算得到了加速,避免了過度繪制行為因為Core Animation可以舍棄所有被完全遮蓋住的圖層,而不用每個像素都去計算一遍。

????如果用到了圖像,盡量避免透明除非非常必要。如果圖像要顯示在一個固定的背景顏色或是固定的背景圖之前,你沒必要相對前景移動,你只需要預填充背景圖片就可以避免運行時混色了。

????如果是文本的話,一個白色背景的UILabel(或者其他顏色)會比透明背景要更高效。

????最后,明智地使用shouldRasterize屬性,可以將一個固定的圖層體系折疊成單張圖片,這樣就不需要每一幀重新合成了,也就不會有因為子圖層之間的混合和過度繪制的性能問題了。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號