標籤:ios8 swift paul hegarty view 視圖
一個view(視圖)是IOS中UIView的子類,標示了螢幕上的一個長方形地區,定義了一個座標系空間來繪圖,並且處理觸摸的操作。
view是有層次的,一個view只能有一個superview,但是可以有多個subview。你可以擷取一個view,當然返回值是可選的,或者擷取一個view的所有subview,返回值是一個數組,雖然這個數組中的元素其實是AnyObject,因為一些曆史遺留原因,不過沒關係它裡面的內容百分百是UIView,你不會擷取到別的東西。
另外還有一個東西叫做UIWindow,它是UIView的子類,但是在IOS開發中你不需要關心,在每一個裝置的螢幕上都會有一個UIWindow,它在最高層,但你不會向他發送任何訊息,你也不跟它互動,你只需要關心UIView就行。
views的階層通常不需要使用代碼,你可以直接從storyboard中拖拽疊放。你也可以通過代碼來建立,有兩個方法可以實現,一個是addSubview,另一個是removeFromSuperview。addSubview向預期的superview發送訊息,而removeFromSuperview向你需要移除的superView發送訊息。
那麼view階層的頂點或者說是根在哪呢,由於某些曆史遺留問題,viewcontroller中有一個屬性的名字叫做view,這就是你們在storyboard情境中的最高層次的view。
接下來講解一下如何初始化一個view。通常的建議是儘可能不要做一個初始化。UIView有兩種構造器,代表了兩種不同的構造方法。如果你寫init(frame:CGRect),參數frame代表父視圖中的frame,它是一個座標系,代表將視圖放到這個座標系中。另一個是使用coder的方式進行初始化,如果你使用storyboard拖拽產生一個視圖,那麼這個視圖是使用init(coder:NSCoder)的方式實現的。
如果要自己的做初始化,推薦的做法是同時實現兩個初始化方法,第一個是一個designed的初始化方法,一旦你重寫了它你就不能再繼承其他designed的初始化方法了。另外還有一個required的初始化方法。然後把需要做的操作寫到一個方法中在構造器中調用。這樣的做法若且唯若你不得不自己寫一個構造器的時候才用到。還有一個初始化的方法就是awakeFromNib如下:
如果你需要在視圖展示之前就要操作某些東西的時候使用這個方法,但是只有storyboard中的視圖才會調用這個方法.接下來會講解一下如何在視圖中繪製和捕捉使用者手勢。
【我們都愛Paul Hegarty】斯坦福IOS8公開課個人筆記11 View視圖