近期在工作中遇到了很多問題,總結(jié)起來還是因?yàn)樽约杭夹g(shù)薄弱,作為一個(gè)上進(jìn)的程序媛,實(shí)在受不了自己落后。我家三石君建議我好好看看《iOS9 programming》這本書,花三個(gè)月的時(shí)間把這本書完全吃透讀通我的技術(shù)將會有質(zhì)得飛躍。雖然去年就曉得并入手了該書,但由于自己的懶惰一直沒有好好看。幸好最近受了點(diǎn)打擊,打算從第一章開始好好研讀一下,并且對每個(gè)章節(jié)都挑出重點(diǎn)總結(jié)筆記,也算是對自己的一個(gè)監(jiān)督。如果大家看到有錯(cuò)誤的地方歡迎指正,共同進(jìn)步
Windows
window 是視圖層級中的最高層級,app中只能有一個(gè)唯一并且確定的main Window,它用來容納之后的所有視圖,window會在加載的時(shí)候創(chuàng)建并且不會被銷毀或替代,它是最終的superview,你看到的其他可見視圖都是它的子類,存在在不同的層級深度中
app中的window必須要填充滿整個(gè)設(shè)備屏幕。如果你使用的是storyboard,系統(tǒng)將會通過UIApplicationMain方法在app加載的時(shí)候?yàn)槟阍O(shè)置好window的frame,如果你是手寫代碼,則必須要手動(dòng)創(chuàng)建window并為其設(shè)置window的frame
let w = UIWindow(frame:UIScreen.mainScreen().bounds)
在iOS9中UIWindow沒有frame,屏幕的bounds將會被設(shè)置為window的frame
let w = UIWindow()
在app運(yùn)行過程中,可以通過以下幾種方法獲取widow的引用:
- 如果一個(gè)View是可見的,它會通過自己的window屬性來自動(dòng)的引用window,你也可以使用UIView的window屬性來詢問它是否最終要嵌入在window中,如果不是的話,則window屬性則會置為nil,一個(gè)View的window屬性為nil,將對用戶不可見
- app的delegate中通過window屬性存在一個(gè)對widow的引用,你可以在任何地方通過獲取sharApplication的delegate屬性來得到windows的引用。
let w = UIApplication.shareApplication().delegate!.window!!
- 通過shareApplication的dkeyWindow屬性,我們也可以獲得window的引用
let w = UIApplication.shareApplication().keyWindow!
這種引用方法不是很確定,因?yàn)橄到y(tǒng)可以創(chuàng)建臨時(shí)的window并且將它們插入到application的keywindow中去。