UIView 繪製原理
1、當我們調用【UIView setNeedsDisplay】這個方法時,其實並沒有立即進行繪製工作,系統會立即調用CALayer的同名方法,並且在當前layer上打上一個標記,然後會在當前runloop將要結束的時候調用CALayer display 這個方法,然後進入視圖的真正繪製過程
2、在【CALayer display】這個方法的內部實現中會判斷這個layer的delegate是否響應displaylayer 這個方法,如果不響應這個方法,就回到系統繪製流程中,如果響應這個方法,那麼就會爲我們提供異步繪製的入口
異步繪製
1、假如我們在某一時機調用了【view setNeedsDisplay】這個方法,系統會在當前runloop將要結束的時候調用【CALayer display】方法,然後如果我們這個layer代理實現了displaylayer這個方法
2、然後切換到子線程去做位圖的繪製,主線程可以去做其他的操作
3、在自吸納成中創建一個位圖的上下文,然後通過CoregraphIC API 可以做當前UI控件的一些繪製工作,最後再通過CGBitmapContextCreateImage()函數來生成一直CGImage圖片
4、最後回到主線程來提交這個位圖,設置layer的contents 屬性,這樣就完成了一個UI控件的異步繪製