1. 程式人生 > >iOS卡頓優化探究學習

iOS卡頓優化探究學習

1、iOS的CoreAnimation並非只是一些動畫API,本質上是控制圖層的分解、儲存和管理體系。會涉及繪圖、效率等問題。

2、CALayer同UIView類似都是一些被層級關係樹管理的矩形塊,並管理子圖層位置,都可以包含圖片、文字等內容,並有一些API來做動畫。最大的不同是CALayer不能處理使用者互動。每個UIView都有對應的layer圖層並可以新增更多圖層,真正的動畫是layer實現,UIView是對其的一個封裝。並且是一種抽象類時候對功能的分離。

3、drawRect:如果方法被呼叫哦,就會為檢視分配一個寄宿圖,大小等於檢視大小*contentScale。會造成cpu資源和記憶體的浪費。

4、通常將影象處理、螢幕渲染交給GPU處理會更快,但是如果GPU資源佔用過高,效能就會開始下降。

5、圖層繪製效率影響:

a太多的幾何結構

b重繪,主要是重疊的半透明圖層

c離屏繪製

d圖片過大

6、問題查詢:

使用xcode工具

Time Profilter 檢視函式耗時時間

CoreAnimation檢視離屏渲染、圖層混合度,

OpenGL ES Driver  檢視GPU佔用率

7、優化方案

a禁止在不斷變動的圖層上面進行光柵化(shouldRasterize),在不變的地方設定為YES,其優點是將一個固定的圖層體系摺疊成單張圖片,並進行快取,這樣就不需要每一幀重新合成。

b避免重繪、例如避免frame的改變

c控制離屏渲染數量

d自動佈局會增加cpu開銷

d cornerRadius和maskToBounds同時作用時會觸發離屏渲染,如果要避免可採用CAShaperLayer畫矩形

總之,要在速度與耗能之間進行平衡,GPU和CPU之間平衡