View官方文檔

  1.   Window是UIWindow class下的實(shí)例并且處理了總體的application的UI的展現(xiàn)渴肉。大部分來(lái)說(shuō)旧乞,app的window不會(huì)有變化树姨。
    
  2.   View是在CALayers之間的連接處工作问窃,去渲染和變換view的內(nèi)容。所有UIKit的view背后都有一個(gè)layer對(duì)象(通常是CALayer 的class)卤妒,這些layer對(duì)象是存儲(chǔ)views和處理view相關(guān)的動(dòng)畫(huà)。
    
  3.   CALayer對(duì)象的作用對(duì)性能有很大的提升字币。實(shí)際view對(duì)象的drawing代碼調(diào)用越少越好则披,并且當(dāng)代碼被調(diào)用,結(jié)果會(huì)被Core Animation緩存并且會(huì)被盡可能多的復(fù)用洗出。復(fù)用尤其在animation的時(shí)候非常有用士复。 因此越多復(fù)用越少系統(tǒng)消耗。
    
  4.   UIView類(lèi)使用了按需drawing模型來(lái)展示內(nèi)容翩活。
    
  5.   當(dāng)你的view的內(nèi)容變化時(shí)阱洪,不應(yīng)當(dāng)直接redraw這些內(nèi)容。相反菠镇,應(yīng)當(dāng)通過(guò)setNeedsDisplay或者setNeedsDisplayInRect:method方法來(lái)使這些view失效冗荸。這些方法告訴系統(tǒng)view有變化并且需要在下一個(gè)節(jié)點(diǎn)上來(lái)重繪。系統(tǒng)會(huì)等到當(dāng)前runloop的結(jié)束在重新進(jìn)行任何重繪之前利耍,這個(gè)delay會(huì)給機(jī)會(huì)去刪除view或者隱藏view蚌本,或者其他形式的對(duì)view的操作盔粹。所有操作都會(huì)在同一時(shí)間得到反應(yīng)。
    
  6.   修改view的集合特性(比如修改位置)并不會(huì)自動(dòng)的使得view的內(nèi)容重繪程癌。
    
  7.   當(dāng)渲染view的內(nèi)容時(shí)舷嗡,實(shí)際drawing過(guò)程會(huì)因view和它對(duì)應(yīng)配置而有所不同。系統(tǒng)的view通常會(huì)繼承private的drawing方法來(lái)渲染content嵌莉。這些系統(tǒng)views會(huì)暴露出接口來(lái)供你修改view的實(shí)際顯現(xiàn)进萄。 如果要自定義UIView的subclass,經(jīng)常要重寫(xiě)drawRect方法并繪制自己的內(nèi)容烦秩。通常提供view的內(nèi)容的方法有很多垮斯,比如直接設(shè)置view的下層layer,或者重載drawRect方法是最通常的技術(shù)只祠。
    
  8.   當(dāng)View開(kāi)始被顯示時(shí)兜蠕,結(jié)果被capture在下層的bitmap中。之后抛寝,view幾何屬性的變化并不會(huì)經(jīng)常導(dǎo)致bitmap被重新創(chuàng)建熊杨。取而代之的是,contentMode的值會(huì)決定bitmap是否應(yīng)當(dāng)去裁剪以適應(yīng)新的bounds或者定位在某個(gè)view的邊緣之上盗舰。
    
  9.   ContentMode是循環(huán)利用view的contents的好方法晶府,但是你依然能設(shè)置conent Mode為UIViewContentModeRedraw,尤其當(dāng)你想在scaling或者resizing操作時(shí)去自定義views或者去redraw時(shí)钻趋。此值下川陆,系統(tǒng)會(huì)強(qiáng)制調(diào)用drawRect:方法來(lái)響應(yīng)幾何變換。
    
  10. 如果一個(gè)view的集合特性改變了蛮位,UIKit會(huì)update它的subviews通過(guò)如下規(guī)則:
    a) 如果配置了autoresizing rules较沪,UIKit僅僅adjust每一個(gè)view通過(guò)這些rules。
    b) 如果實(shí)現(xiàn)了layoutSubviews方法失仁,UIKit會(huì)調(diào)用它尸曼。可以通過(guò)這個(gè)方法來(lái)調(diào)整任何subviews的位置和size萄焦。
  11. 如果任何view被標(biāo)記為需要被redrawn控轿,UIKit會(huì)讓view去自己redraw。對(duì)于定義了drawRect方法的自定義view拂封,UIKit會(huì)調(diào)用那個(gè)方法茬射。
  12. frame,boundsproperties的關(guān)系
    a) frame是指在其父 中的坐標(biāo)系統(tǒng)中的frame矩形屬性;
    b) bounds是指在view自己的坐標(biāo)系統(tǒng)中的bounds矩形屬性
  13. 使用center或者frame屬性主要為了管理當(dāng)前view的幾何屬性烘苹,比如修改位置或者尺寸躲株。
  14. 針對(duì)只修改位置的情況,center屬性是最佳方案
  15. 在drawing過(guò)程中主要使用bounds屬性
  16. 雖然可以單獨(dú)修改frame镣衡、bounds霜定、center屬性档悠,但是其中這些屬性會(huì)互相影響:
    a) Set frame屬性時(shí),bounds的size會(huì)match到新的frame的size上望浩;center屬性也會(huì)match到新frame的center上辖所;
    b) Set center屬性時(shí),frame的original值也會(huì)相應(yīng)改變
    c) Set bounds的size屬性時(shí)磨德,frame的size屬性也會(huì)match到bounds的size屬性上缘回。
  17. Points vs Pixels。在iOS中典挑,所有坐標(biāo)值和距離都是浮點(diǎn)數(shù)酥宴,引用為points。
  18. 一個(gè)points未必對(duì)應(yīng)到屏幕上的一個(gè)pixel您觉。
  19. 自定義的部分事件部分如下:
    a) Event-handling拙寡,例如touchBegan—touchesMoved—touchesEnded—touchesCancelled
    b) LayoutSubviews
    c) drawRect
  20. drawRect:只有在你的view在運(yùn)行時(shí)變化并且使用了native技術(shù)例如UIKit或者Core Graphics等等做繪圖時(shí)才需要被使用。
  21. 不論哪一種content mode生效,你都可以強(qiáng)制使用setNeedsDisplay或者setNeedsDisplayInRect來(lái)重繪內(nèi)容。
  22. 一個(gè)window對(duì)象有很多職責(zé):
    a) 包含了app的可視對(duì)象
    b) 承載了你的view和其它app對(duì)象的touch事件
    c) 和你的app的vc一起工作脂男,促進(jìn)方向的改變
  23. UIWindowDidBecomeKeyNotification和UIWindowDidResignKeyNotification通知幫助你的app去鎖定哪一個(gè)window是key window,也就是接收鍵盤(pán)時(shí)間和其它touch相關(guān)事件的window飒硅。
  24. 另一個(gè)可以添加subviews到一個(gè)view體系里的就是loadView或viewDidLoad方法。
  25. 切記,如果你remove了一個(gè)子view并且計(jì)劃將來(lái)要重用,一定要重新retain這個(gè)子view始赎。因?yàn)閞emoveFromSuperview會(huì)autorelease一個(gè)subview,在真正移除之前仔燕。所以如果你不在下一個(gè)事件loop cycle之前retain這個(gè)view极阅,view可能會(huì)被release掉。
  26. Convert…: fromView:方法會(huì)從其它view的坐標(biāo)系系統(tǒng)轉(zhuǎn)換為local當(dāng)前view的坐標(biāo)系系統(tǒng)涨享。如果你指定nil為上述方法的參數(shù),轉(zhuǎn)換會(huì)將對(duì)應(yīng)的坐標(biāo)系落在包含view的window上仆百。
  27. 當(dāng)實(shí)現(xiàn)一個(gè)可以拖動(dòng)的area時(shí)厕隧,需要經(jīng)常手動(dòng)給 子views布局。因?yàn)槿绻o可滾動(dòng)的內(nèi)容單獨(dú)一個(gè)大的scrollable內(nèi)容是不高效的俄周,app需要繼承一個(gè)root view來(lái)包含很多更小的title views吁讨。
  28. 每一個(gè)view對(duì)象都對(duì)應(yīng)了一個(gè)CALayer來(lái)管理展示層和動(dòng)畫(huà)層。
  29. 在自定義view時(shí)需要注意:
    a) 決定好合適的初始化函數(shù):
    如果是手動(dòng)編寫(xiě)峦朗,override initWithFrame:方法
    如果是從nib文件讀取建丧,override initWithCoder方法。
    b) 實(shí)現(xiàn)dealloc方法去處理自定義data的清理問(wèn)題
    c) 處理自定義繪制波势,覆蓋drawrect方法翎朱。
    d) 如果view管理很多子view橄维,那么:
    i.在init序列里創(chuàng)建這些view
    ii.如果view需要自定義布局,則override layoutSubviews方法并將布局方法放在那里拴曲。
  30. 很多屬性可以允許你是使用覆蓋過(guò)的方法争舞,例如contentMode設(shè)置為contentStrech屬性,可以改變最終render的結(jié)果澈灼,并且可以去由你自己redraw內(nèi)容竞川。
  31. 改變一個(gè)view的subview的animation方法:在iOS4后,使用transitionWithView:duration:options:animations:completion:方法去初始化一個(gè)view的變化過(guò)渡叁熔。在block中傳入此方法委乌,則會(huì)改變涉及到showing,hiding,adding,removing子view的方法。
  32. 將一個(gè)View替換為另一個(gè)View的animation:在iOS4以后荣回,可以通過(guò)transitionFromView:toView:duration:options:completion:方法來(lái)在兩個(gè)views中切換遭贸。這個(gè)方法通常會(huì)remove第一個(gè)view,切換為第二個(gè)view驹马,所以如果你還想使用第一個(gè)view革砸,最好做好retain。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末糯累,一起剝皮案震驚了整個(gè)濱河市算利,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泳姐,老刑警劉巖效拭,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胖秒,居然都是意外死亡缎患,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)阎肝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挤渔,“玉大人,你說(shuō)我怎么就攤上這事风题∨械迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵沛硅,是天一觀的道長(zhǎng)眼刃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)摇肌,這世上最難降的妖魔是什么擂红? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮围小,結(jié)果婚禮上昵骤,老公的妹妹穿的比我還像新娘树碱。我一直安慰自己,他們只是感情好涉茧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布赴恨。 她就那樣靜靜地躺著,像睡著了一般伴栓。 火紅的嫁衣襯著肌膚如雪伦连。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天钳垮,我揣著相機(jī)與錄音惑淳,去河邊找鬼。 笑死饺窿,一個(gè)胖子當(dāng)著我的面吹牛歧焦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肚医,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绢馍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了肠套?” 一聲冷哼從身側(cè)響起舰涌,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎你稚,沒(méi)想到半個(gè)月后瓷耙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刁赖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年搁痛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宇弛。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸡典,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枪芒,到底是詐尸還是另有隱情轿钠,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布病苗,位于F島的核電站,受9級(jí)特大地震影響症汹,放射性物質(zhì)發(fā)生泄漏硫朦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一背镇、第九天 我趴在偏房一處隱蔽的房頂上張望咬展。 院中可真熱鬧泽裳,春花似錦、人聲如沸破婆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祷舀。三九已至瀑梗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裳扯,已是汗流浹背抛丽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饰豺,地道東北人亿鲜。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冤吨,于是被迫代替她去往敵國(guó)和親蒿柳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容