drawRect: 和 - (void)setNeedsDisplay 的一些理解


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方便出來數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM