drawRect 什麼時候呼叫

2021-07-23 12:44:11 字數 1316 閱讀 6411

首先兩個方法都是非同步執行。layoutsubviews方便資料計算,drawrect方便檢視重繪。

layoutsubviews在以下情況下會被呼叫:

1、init初始化不會觸發layoutsubviews。

2、addsubview會觸發layoutsubviews。

3、設定view的frame會觸發layoutsubviews,當然前提是frame的值設定前後發生了變化。

4、滾動乙個uiscrollview會觸發layoutsubviews。

5、旋轉screen會觸發父uiview上的layoutsubviews事件。

6、改變乙個uiview大小的時候也會觸發父uiview上的layoutsubviews事件。

7、直接呼叫setlayoutsubviews。

drawrect在以下情況下會被呼叫:

1、如果在uiview初始化時沒有設定rect大小,將直接導致drawrect不被自動呼叫。

drawrect 掉用是在controller->loadview, controller->viewdidload 兩方法之後掉用的.所以不用擔心在 控制器中,這些view的drawrect就開始畫了.這樣可以在控制器中設定一些值給view(如果這些view draw的時候需要用到某些變數 值).

2、該方法在呼叫sizet

ofit後被呼叫,所以可以先呼叫sizetofit計算出size。然後系統自動呼叫drawrect:方法。

3、通過設定contentmode屬性值為uiviewcontentmoderedraw。那麼將在每次設定或更改frame的時候自動呼叫drawrect:。

4、直接呼叫setneedsdisplay,或者setneedsdisplayinrect:觸發drawrect:,但是有個前提條件是rect不能為0。

以上1,2推薦;而3,4不提倡

drawrect方法使用注意點:

1、 若使用uiview繪圖,只能在drawrect:方法中獲取相應的contextref並繪圖。如果在其他方法中獲取將獲取到乙個invalidate 的ref並且不能用於畫圖。drawrect:方法不能手動顯示呼叫,必須通過呼叫setneedsdisplay 或 者 setneedsdisplayinrect,讓系統自動調該方法。

2、若使用calayer繪圖,只能在drawincontext: 中(類似魚drawrect)繪製,或者在delegate中的相應方法繪製。同樣也是呼叫setneeddisplay等間接呼叫以上方法

3、若要實時畫圖,不能使用gesturerecognizer,只能使用touchbegan等方法來掉用setneedsdisplay實時重新整理螢幕

原文:

layoutSubviews什麼時候呼叫

layoutsubviews在以下情況下會被呼叫 1 init初始化不會觸發layoutsubviews 2 addsubview會觸發layoutsubviews 3 設定view的frame會觸發layoutsubviews,當然前提是frame的值設定前後發生了變化 4 滾動乙個uiscrol...

什麼時候呼叫CDC DeleteDC ?

很多人在在圖形程式設計時,不太清楚什麼時候呼叫cdc deletedc 其實非常簡單,一般而言,這個函式不用我們自己去呼叫,cdc類的析構函式會去為我們自動呼叫這個函式的。這個函式的功能就是為我們刪除當前cdc物件中的m hdc成員變數。如果dc是通過 createdc createic or cr...

什麼時候呼叫CDC DeleteDC ?

很多人在在圖形程式設計時,不太清楚什麼時候呼叫cdc deletedc 其實非常簡單,一般而言,這個函式不用我們自己去呼叫,cdc類的析構函式會去為我們自動呼叫這個函式的。這個函式的功能就是為我們刪除當前cdc物件中的m hdc成員變數。如果dc是通過 createdc createic or cr...