iOS UIView重繪機制drawRect

2021-07-13 11:57:34 字數 1840 閱讀 4388

ios的繪圖操作是在uiview類的drawrect方法中完成的,所以如果我們要想在乙個uiview中繪圖,需要寫乙個擴充套件uiview 的類,並重寫drawrect方法,在這裡進行繪圖操作,程式會自動呼叫此方法進行繪圖。

下面先說明一下繪圖,比如,你想繪製乙個方塊,你需要寫乙個類來擴充套件uiview並在drawrect方法中填入如下**:

- (void)drawrect:(cgrect)rect  

再說明一下重繪,重繪操作仍然在drawrect方法中完成,但是蘋果不建議直接呼叫drawrect方法,當然如果你強直直接呼叫此方法,當然是沒有效果的。蘋果要求我們呼叫uiview類中的setneedsdisplay方法,則程式會自動呼叫drawrect方法進行重繪。(呼叫setneedsdisplay會自動呼叫drawrect)

在uiview中,重寫drawrect: (cgrect) arect方法,可以自己定義想要畫的圖案.且此方法一般情況下只會畫一次.也就是說這個drawrect方法一般情況下只會被掉用一次. 當某些情況下想要手動重畫這個view,只需要掉用[self setneedsdisplay]方法即可.

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

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

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

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

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

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

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

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

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

setneedslayout可以重新呼叫drawrect:方法,實現重繪的功能;

- (void)drawrect:(cgrect)rect;

- (void)setneedsdisplay;

- (void)setneedsdisplayinrect:(cgrect)rect;

一些常見問題

問1:由uiimageview派生出的類,為什麼在drawrect中,無法繪製矩形?但如果從uiview派出就可以?

問2:在ios開發中 ,為什麼自定義uiview 重寫drawrect方法之後,繪圖區域之外為黑,合理的情況是,我沒有繪製或者填充的區域應該是透明的才對啊,如果我希望沒有繪製的地方為 透明 該如何做?

答:self.backgroundcolor = [uicolor clearcolor]; 並記得 [super drawrect];

uc gui重繪機制

乙個控制項根據它的特性繪製自己。這一工作通過呼叫wm的 api函式 wm exec 來完成。如果在程式中沒有呼叫 wm exec 就必須呼叫 wm paint 函式來繪製控制項。在多工環境的 uc gui 乙個後台任務通常用於呼叫 wm exec 並更新控制項 及其它所有帶有 函式的視窗 這樣就不必...

iOS重繪機制drawRect

ios的繪圖操作是在uiview類的drawrect方法中完成的,所以如果我們要想在乙個uiview中繪圖,需要寫乙個擴充套件uiview 的類,並重寫drawrect方法,在這裡進行繪圖操作,程式會自動呼叫此方法進行繪圖。下面先說明一下繪圖,比如,你想繪製乙個方塊,你需要寫乙個類來擴充套件uivi...

iPhone重繪機制drawRect

phone重繪機制drawrect 如何使用iphone進行繪圖 重繪操作 iphone的繪圖操作是在uiview類的drawrect方法中完成的,所以如果我們要想在乙個uiview中繪圖,需要寫乙個擴充套件uiview 的類,並重寫drawrect方法,在這裡進行繪圖操作,程式會自動呼叫此方法進行...