導語:App中顯示的圖片大部分來自伺服器,一般使用SDWebImage幫我們下載並顯示,但是這並不是最好的效果,本文介紹如何優化網路圖片的顯示。
友情提示:效能優化是個無底洞,建議適可而止。
一、存在的問題
1.畫素不對齊
-
由於網路圖片一般不會有@2x和@3x之分,通過SDWebImage庫下載的圖片不加以處理就直接顯示。
-
畫素不對齊是指物理畫素(pixel)不對齊;出現畫素不對齊,會導致GPU在渲染時,對沒對齊的邊緣,進行插值計算,造成效能損耗了。
-
當圖片的size和顯示圖片View的size不同 或 圖片的scale和螢幕的scale不同,就會發生畫素不對齊的問題。
-
iPhone模擬器中的Debug -> Color Misaligned Images選項 或Core Animation->Display Settings->Color Misaligned Images選項都可以將畫素不對齊的部分顯示出來。
-
當UIView(及其子類)的frame畫素不對齊顯示洋紅色;當圖片的畫素大小與控制元件的大小不一致,顯示黃色。
2.畫素混合
-
畫素混合是指在某檢視為透明背景色,GPU在渲染檢視時,需要將該檢視和下層檢視混合(Blend)後才能計算出該畫素點的實際顏色;這增加了GPU的工作,損耗了效能。
-
當圖片是透明圖片時,畫素混合必然會發生。
-
iPhone模擬器中的Debug ->Color Blended Layers選項 和 Core Animation ->Display Settings ->Color Blended Layers都可以將畫素混合的部分顯示出來。
-
發生了畫素混合的區域顯示紅色,正常則顯示綠色。
3.離屏渲染
- App中經常使用圓角圖片,如果通過設定cornerRadius值和masksToBounds=YES實現圓角效果。因為它會觸發GPU的離屏渲染,引起效能問題。模擬器中的Color Offscreen-Rendered可以檢測是否發生離屏渲染(如果出現黃色就發生了離屏渲染)。
二、解決方案
1.畫素不對齊
- 要想畫素對齊,必須保證image.size和顯示圖片view.size相等 且 image.scale和 [UIScreen mainScreen].scale相等。可以在網路圖片下載完成後進行壓縮裁剪等操作在進行渲染。
2.畫素混合
- 設定圖片為不透明,可以設定背景顏色為白色。
3.離屏渲染
- 離屏渲染是圖片圓角處理中討論比較多的問題,一般利用Core Graphics繪製。