視圖是個(gè)UIView或者UIView的子類。它知道如何把自己畫在一個(gè)矩形區(qū)域。
一個(gè)view同時(shí)也是個(gè)UIResponder( UIView是UIResponder的子類). 也就是說view受用戶交互的影響,比如輕觸,滑動(dòng)。所以,view不僅僅是用戶看到的,也是用戶可以觸到的界面。組織好你的views,這樣應(yīng)用對不同的touch可以有正確的響應(yīng)。
視圖組織的主要方法是分層級。視圖可以有多個(gè)子視圖。但是一個(gè)子視圖只能有一個(gè)直接上層視圖.(superview). 所以會(huì)有個(gè)視圖樹. 這種層次組織方式,可以讓一組視圖一起挪走或者出現(xiàn)。視圖和它的子視圖們同時(shí)被隱藏或者可見。視圖的層次結(jié)構(gòu)也是事件響應(yīng)鏈(responder chain)的基礎(chǔ),盡管它們可能并不完全相同。
View可以從nib文件中創(chuàng)建,當(dāng)然也可以從代碼創(chuàng)建。這兩種方法沒有傾向性,按你的需求來選擇方法。
The Window
視圖層級結(jié)構(gòu)的最上層是應(yīng)用的window.它是UIWindow的實(shí)例(或者它的subclass的實(shí)例).UIWindow也是UIView的一個(gè)子類哈.(也就是說UIWindow is a UIView). 一個(gè)應(yīng)用只有一個(gè)main window. 它在應(yīng)用啟動(dòng)的時(shí)候創(chuàng)建,而且在應(yīng)用的lifetime不會(huì)被銷毀或者替代. 它是應(yīng)用所有可見的view的背景,也是所有子視圖的終極上層視圖。其它視圖都由于是window的subviews而被顯示出來.
注釋: 如果設(shè)備有多個(gè)屏幕,可能需要多個(gè)UIWindow。本章先只討論一個(gè)屏幕的設(shè)備。
應(yīng)用的Window會(huì)在初始化的時(shí)候填充整個(gè)設(shè)備屏幕. 通過設(shè)置window的外框到屏幕的邊界來達(dá)到這一點(diǎn)。用mainstoryboard的時(shí)候,UIApplicationMain會(huì)幫你在背后處理。不用的時(shí)候,你需要自己在app生命周期的很早階段創(chuàng)建這個(gè)window,并設(shè)置外框。
let w = UIWindow(frame:UIScreen.mainScreen().bounds)
在iOS 9中,可以不用帶frame參數(shù),屏幕的邊界會(huì)直接賦值給window的frame.
let w = UIWindow()
https://developer.apple.com/library/prerelease/ios/featuredarticles/ViewControllerPGforiPhoneOS/Art/VCPG_ContainerViewController_fig_1-2_2x.png