UIView的繪製原理 和 非同步繪製的實現

2021-09-13 04:06:36 字數 645 閱讀 4012

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控制項的非同步繪製

繪製虛線的UIView

繪製虛線的uiview cashapelayer配合貝塞爾曲線可以繪製曲線,筆者繼承了乙個uiview的子類,並將該子類的backedlayer替換為cashapelayer,以此來實現繪製虛線的效果.繪製出各種虛線的效果圖 實現的原始碼 linedashview.h 與 linedashview....

UIView 的布局與繪製顯示相關方法呼叫時機

uiview是我們經常使用的乙個基本控制項,不知道你是否對以下方法在什麼時候呼叫感到疑惑?雖然他們和布局都有關係。另外還會簡述drawrect的呼叫,sizetofit與sizethatfit的關係。從字面意思理解就是,布局子檢視,對子檢視進行布局約束設定和調整,你可以重寫它來布局子檢視,但是不應該...

非同步執行的原理

計算機的程式分為同步執行和非同步執行兩種執行過程。同步執行中有三大順序語句 順序控制語句 分支控制語句和迴圈控制語句。1.順序控制語句 順序控制語句就是由上至下 由左至右執行 2.分支控制語句 if語句和switch語句都是分支控制語句,由各個分支決定著執行結果。3.迴圈控制語句 迴圈控制語句有 f...