如何使用iphone進行繪圖、重繪操作
iphone的繪圖操作是在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實時重新整理螢幕
iOS重繪機制drawRect
ios的繪圖操作是在uiview類的drawrect方法中完成的,所以如果我們要想在乙個uiview中繪圖,需要寫乙個擴充套件uiview 的類,並重寫drawrect方法,在這裡進行繪圖操作,程式會自動呼叫此方法進行繪圖。下面先說明一下繪圖,比如,你想繪製乙個方塊,你需要寫乙個類來擴充套件uivi...
iOS重繪機制drawRect
ios的繪圖操作是在uiview類的drawrect方法中完成的,所以如果我們要想在乙個uiview中繪圖,需要寫乙個擴充套件uiview 的類,並重寫drawrect方法,在這裡進行繪圖操作,程式會自動呼叫此方法進行繪圖。下面先說明一下繪圖,比如,你想繪製乙個方塊,你需要寫乙個類來擴充套件uivi...
iOS重繪機制drawRect
ios的繪圖操作是在uiview類的drawrect方法中完成的,所以如果我們要想在乙個uiview中繪圖,需要寫乙個擴充套件uiview 的類,並重寫drawrect方法,在這裡進行繪圖操作,程式會自動呼叫此方法進行繪圖。下面先說明一下繪圖,比如,你想繪製乙個方塊,你需要寫乙個類來擴充套件uivi...