instrument 之 core animation
1、Color Blended Layers
圖層混合 需要消耗一定的GPU資源,避免設定alpha小於1,省去不必要的運算
2、Color Hits Green and Misses Red
光柵化 view.layer.shouldRasterize = YES;光柵化是將一個layer預先渲染成點陣圖(bitmap),然後加入快取中。如果對於陰影效果這樣比較消耗資源的靜態內容進行快取,可以得到一定幅度的效能提升
3、Color Copied Images
圖片格式 把圖片從PNG或JPEG等格式中解壓出來,得到畫素資料, 如果GPU不支援這種顏色各式,CPU需要進行格式轉換
4、Color Misaligned Images
圖片的縮放 圖片的縮放需要佔用時間,因此我們要儘可能保證無論是本地圖片還是從網路或取得圖片的大小,都與其frame保持一致。
5、Color Offscreen-Rendered Yellow
離屏渲染 表示渲染髮生在螢幕之外。離屏渲染意味著把渲染結果臨時儲存,等用到時再取出,因此相對於普通渲染更佔用資源。
1、重寫drawRect方法;(自動觸發離屏渲染)
2、有mask或者是陰影(layer.masksToBounds, layer.shadow*),模糊效果也是一種mask;(自動觸發離屏渲染)
3、layer.shouldRasterize = true;(手動開啟離屏渲染)
解決辦法:imgView.layer.shadowPath = UIBezierPath(rect: imgView.bounds).CGPath
指定了陰影路徑,如果沒有手動指定,Core Animation會去自動計算,這就會觸發離屏渲染。如果人為指定了陰影路徑,就可以免去計算,從而避免產生離屏渲染。
設定cornerRadius本身並不會導致離屏渲染,但很多時候它還需要配合layer.masksToBounds = true使用。根據之前的總結,設定masksToBounds會導致離屏渲染。
必須設定圓角,可以使用光柵化技術將圓角快取起來view.layer.shouldRasterize = true