iOS重繪機制drawRect

2021-06-24 11:46:09 字數 1512 閱讀 7809

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等間接呼叫以上方法。

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

- (void)drawrect:(cgrect)rect;

- (void)setneedsdisplay;

- (void)setneedsdisplayinrect:(cgrect)rect;

iOS重繪機制drawRect

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

iOS重繪機制drawRect

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

iOS重繪機制drawRect

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