UIview需要知道的事情setNeedsDisplay,setNeedsLayout

1、在Mac OS中NSWindow的父類是NSResponder赶撰,而在i OS 中UIWindow 的父類是UIVIew舌镶。程序一般只有一個窗口但是會又很多視圖柱彻。

2、UIView的作用:描畫和動畫餐胀,視圖負責對其所屬的矩形區(qū)域描畫哟楷、布局和子視圖管理、事件處理否灾、可以接收觸摸事件卖擅、事件信息的載體、等等墨技。

3惩阶、UIViewController 負責創(chuàng)建其管理的視圖及在低內存的時候將他們從內存中移除。還為標準的系統(tǒng)行為進行響應健提。

4琳猫、layOutSubViews 可以在自己定制的視圖中重載這個方法,用來調整子視圖的尺寸和位置私痹。

5、 UIView的setNeedsDisplay和setNeedsLayout方法统刮。首先兩個方法都是異步執(zhí)行的紊遵。而setNeedsDisplay會調 用自動調用drawRect方法,這樣可以拿到UIGraphicsGetCurrentContext侥蒙,就可以畫畫了暗膜。而setNeedsLayout 會默認調用layoutSubViews,就可以處理子視圖中的一些數據鞭衩。

宗上所訴学搜,setNeedsDisplay方便繪圖,而layoutSubViews方便出來數據


1,UIView的setNeedsDisplay和setNeedsLayout方法

首先兩個方法都是異步執(zhí)行的论衍。而setNeedsDisplay會調用自動調用drawRect方法瑞佩,這樣可以拿到? UIGraphicsGetCurrentContext,就可以畫畫了坯台。而setNeedsLayout會默認調用layoutSubViews炬丸,

就可以? 處理子視圖中的一些數據。

綜上所訴蜒蕾,setNeedsDisplay方便繪圖稠炬,而layoutSubViews方便出來數據。

layoutSubviews在以下情況下會被調用:

1咪啡、init初始化不會觸發(fā)layoutSubviews首启。

2、addSubview會觸發(fā)layoutSubviews撤摸。

3毅桃、設置view的Frame會觸發(fā)layoutSubviews褒纲,當然前提是frame的值設置前后發(fā)生了變化。

4疾嗅、滾動一個UIScrollView會觸發(fā)layoutSubviews外厂。

5、旋轉Screen會觸發(fā)父UIView上的layoutSubviews事件代承。

6汁蝶、改變一個UIView大小的時候也會觸發(fā)父UIView上的layoutSubviews事件。

7论悴、直接調用setLayoutSubviews掖棉。

drawRect在以下情況下會被調用:

1、如果在UIView初始化時沒有設置rect大小膀估,將直接導致drawRect不被自動調用幔亥。drawRect調用是在Controller->loadView, Controller->viewDidLoad 兩方法之后掉用的.所以不用擔心在控制器中,這些View的drawRect就開始畫了.這樣可以在控制器中設置一些值給View(如果這些View draw的時候需要用到某些變量值).

2、該方法在調用sizeToFit后被調用察纯,所以可以先調用sizeToFit計算出size帕棉。然后系統(tǒng)自動調用drawRect:方法。

3饼记、通過設置contentMode屬性值為UIViewContentModeRedraw香伴。那么將在每次設置或更改frame的時候自動調用drawRect:。

4具则、直接調用setNeedsDisplay即纲,或者setNeedsDisplayInRect:觸發(fā)drawRect:,但是有個前提條件是rect不能為0博肋。

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

drawRect方法使用注意點:

1、若使用UIView繪圖匪凡,只能在drawRect:方法中獲取相應的contextRef并繪圖膊畴。如果在其他方法中獲取將獲取到一個 invalidate的ref并且不能用于畫圖。drawRect:方法不能手動顯示調用锹雏,必須通過調用setNeedsDisplay 或者 setNeedsDisplayInRect巴比,讓系統(tǒng)自動調該方法。

2礁遵、若使用calayer繪圖轻绞,只能在drawInContext: 中(類似于drawRect)繪制,或者在delegate中的相應方法繪制佣耐。同樣也是調用setNeedDisplay等間接調用以上方法

3政勃、若要實時畫圖,不能使用gestureRecognizer兼砖,只能使用touchbegan等方法來掉用setNeedsDisplay實時刷新屏幕

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末奸远,一起剝皮案震驚了整個濱河市既棺,隨后出現的幾起案子,更是在濱河造成了極大的恐慌懒叛,老刑警劉巖丸冕,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異薛窥,居然都是意外死亡胖烛,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門诅迷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佩番,“玉大人,你說我怎么就攤上這事罢杉√宋罚” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵滩租,是天一觀的道長赋秀。 經常有香客問我,道長律想,這世上最難降的妖魔是什么沃琅? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蜘欲,結果婚禮上,老公的妹妹穿的比我還像新娘晌柬。我一直安慰自己姥份,他們只是感情好,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布年碘。 她就那樣靜靜地躺著澈歉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屿衅。 梳的紋絲不亂的頭發(fā)上埃难,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音涤久,去河邊找鬼涡尘。 笑死,一個胖子當著我的面吹牛响迂,可吹牛的內容都是我干的考抄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蔗彤,長吁一口氣:“原來是場噩夢啊……” “哼川梅!你這毒婦竟也來了疯兼?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤贫途,失蹤者是張志新(化名)和其女友劉穎吧彪,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體丢早,經...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡姨裸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了香拉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啦扬。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凫碌,靈堂內的尸體忽然破棺而出扑毡,到底是詐尸還是另有隱情,我是刑警寧澤盛险,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布瞄摊,位于F島的核電站,受9級特大地震影響苦掘,放射性物質發(fā)生泄漏换帜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一鹤啡、第九天 我趴在偏房一處隱蔽的房頂上張望惯驼。 院中可真熱鬧,春花似錦递瑰、人聲如沸祟牲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽说贝。三九已至,卻和暖如春慎颗,著一層夾襖步出監(jiān)牢的瞬間乡恕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工俯萎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留傲宜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓讯屈,卻偏偏與公主長得像蛋哭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涮母,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內容