UIKit 之UIViewController & UIView

   隔了好一段時間沒寫什麼,這篇其實也不算一篇文章,只是一個知識要點的記錄,好記性很差爛筆頭,把看過了解到的東西記下來。html


  UIViewControllerios

  一、UIViewController主要有兩種,一種是內容ViewController,用於展現內容.一種是容器ViewContrller,做爲其它ViewContronller的容器,如UINavigationViewContrller.UIViewController主要做爲data與view間的橋樑:
另大部分經過delegate或target-action的事件處理也由UIViewController處理的
  二、 When you present a view controller, UIKit looks for a view controller that provides a suitable context for the presentation. In many cases, UIKit chooses the nearest container view controller but it might also choose the window’s root view controller.大部分狀況下,選擇離當前view controller最近的(即最頂層的)容器UIViewController做爲presentViewController,以下圖
拿的是NavigationController做爲presentViewController。
  三、 蘋果建議們在自定義view controller能夠先看下系統是否已經有對應知足需求的controller了,由於蘋果已經實現了不少不一樣功能的view controller。最後自定義view controller 也必定要遵循系統規則。
In cases where two view controllers need to communicate or pass data back and forth, they should always do so using explicitly defined public interfaces.
The delegation design pattern is frequently used to manage communication between view controllers.
controller之間傳遞數據必定要有明確的接口,delegate就是一種經常使用的方式。 
 
  四、對於要啓動時要恢復應用以前的UI狀態,可參考文檔 Preserving and Restoring State章節。
  五、用swift寫一個 Demo 熟悉語法外也試了一下各類present組合在iphone展示是如何的,popover應該要怎麼作,自定義present動畫已經瞭解但沒加在demo裏

   UIView
  一、 當UIView視圖首次出如今屏幕上時,系統就會叫它畫它的內容,而後截圖做爲這個視圖可視化地引用,若是視圖一直沒有改變,載圖會一直做爲視圖的內容被系統重用,直到視圖內容改變,系統會對視圖從新載圖。當視圖內容改變時,咱們能夠調用setNeedDisplay或detNeedDisplayInRect:重繪視圖區域。視圖的重繪是在下一runloop,因此可把不少改變組合在一塊兒在下一個runloop一塊兒執行。
  二、在UIView中能夠動畫的屬性包括:

  frame—Use this to animate position and size changes for the view.
  bounds—Use this to animate changes to the size of the view.
  center—Use this to animate the position of the view.
  transform—Use this to rotate or scale the view.
  alpha—Use this to change the transparency of the view.
  backgroundColor—Use this to change the background color of the view.
  contentStretch—Use this to change how the view’s contents stretch.  
要獲得更多的控制的話能夠layer及別中使用CoreAnimation.git

  三、有效使用UIViews一些要注意的地方github

 (1)並非全部的View都有對應的view controller
 (2)儘可能少用自定義繪製,除非系統如今支持不了你要的展示 
 (3)儘量爲view的opaque設置爲YES
   (4)不要在系統控件(如button中加入label或imageView以顯示圖片和文字)中嵌入subviews
   (5)若是window的rootView是容器類型的view controller的view,不須要咱們初始化view的size,它會根據狀態欄的變化自動調整。
 (6)當你改變transform屬性時,相對的都是UIView的中center自己
 (7)當transform屬性不是identity,當前view的frame是不肯定的,應該要被忽略,而應該使用bounds和center。可是當前view的subviews的frame是能夠,由於它們是相對於父view的bounds的。
   (8) 動畫相關,做用於UIView相關的屬性的代碼至關於做用於它的layer.可是若是是自定義建立出來的layer,UIView類方法那些動畫函數對它是不起做用的,那些動畫block中參數對於它是無效的,這種狀況應該要使用Core Animation。
相關文章
相關標籤/搜索