這幾天做了一個查看股票行情的app. 完成之後,當k線比較多的時候,app 對於捏合、拖動手勢的反應不太流暢, 主要原因是drawRect: 乾的活太多, 竟然需要40ms+, fps 自然不高 最後按照下麵這些原則,進行調整修改,流暢度提高不少,大多數的繪製時間控制在了10ms左右 總結如下: 1 ...
這幾天做了一個查看股票行情的app.
完成之後,當k線比較多的時候,app 對於捏合、拖動手勢的反應不太流暢,
主要原因是drawRect: 乾的活太多, 竟然需要40ms+, fps 自然不高
最後按照下麵這些原則,進行調整修改,流暢度提高不少,大多數的繪製時間控制在了10ms左右
總結如下:
1. 儘量不要實現drawRect(每次調用該方法時,都要為backing store分配記憶體,非常消耗CPU)
2. 避免在drawRect:中進行耗費大量CPU資源的工作
2. 儘量少調用setNeedsDisplay:(視圖內容變化時才調用)
3. 考慮使用setNeedDisplayInRect: , 傳入drawRect:的rect越小,stoke,fill的時間越少, 即使drawRect:是根據視圖邊界繪製的)
4. 充分利用GPU的資源,直接設置layer的border,shadow,corner,gradient等屬性, GPU將會處理這些屬性(相反如果GPU緊張,CPU空閑,應由CPU處理,可在drawRect:中實現)
5. 如果繪製很多東西到一個視圖時,可嘗試開啟drawsAsynchronusly,那麼GPU會將視圖內容繪製到backing store中,但是開啟後,記憶體會增加,因此需要評估開啟前後性能的變化,謹慎使用。
代碼:https://github.com/beddup/TradeTraining/tree/master