1、 drawRect: is invoked automaticall,never call it directly!!
2、 When a view needs to be redrawn,use:
- (void)setNeedsDisplay;
3、在非主線程中調用,需使用如下方法:
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
4、setNeedsDisplay是不阻塞的,
需要自己制造阻塞,
setNeedsDisplay我理解就是告訴系統,等會幫哥把這塊重新畫一下。
系統就知道了,等系統有空了,他就一起畫了,
如果想立即畫出來,可能要用setNeedsLayout,
或者不用drawInRect系列的方式,直接改view.image或者文字,加動畫等方式實現吧。
5、setNeedsDisplay和layoutSubViews
首先兩個方法都是異步執行的。而setNeedsDisplay會調用自動調用drawRect方法,這樣可以拿到UIGraphicsGetCurrentContext,就可以畫畫了。而setNeedsLayout會默認調 用layoutSubViews,就可以處理子視圖中的一些數據。
宗上所訴,setNeedsDisplay方便繪圖,而layoutSubViews方便出來數據。