UIWindow的那些事,UIWindow那些事
UIView是視圖的基類,UIViewController是視圖控制器的基類,UIResponder是表示一個可以在螢幕上響應觸摸事件的對象;
一、UIWindow是一種特殊的UIView,通常在一個程式中只會有一個UIWindow,但可以手動建立多個UIWindow,同時加到程式裡面。UIWindow在程式中主要起到三個作用:
1、作為容器,包含app所要顯示的所有視圖
2、傳遞觸摸訊息到程式中view和其他對象
3、與UIViewController協同工作,方便完成裝置方向旋轉的支援
二、通常我們可以採取兩種方法將view添加到UIWindow中:
1、addSubview
直接將view通過addSubview方式添加到window中,程式負責維護view的生命週期以及重新整理,但是並不會為去理會view對應的ViewController,因此採用這種方法將view添加到window以後,我們還要保持view對應的ViewController的有效性,不能過早釋放。
2、rootViewController
rootViewController時UIWindow的一個遍曆方法,通過設定該屬性為要添加view對應的ViewController,UIWindow將會自動將其view添加到當前window中,同時負責ViewController和view的生命週期的維護,防止其過早釋放
主視窗(key window)接受特定事件
一個視窗當前能接受鍵盤和非觸摸事件時,便被認為是主視窗。而觸摸事件則被投遞到觸摸發生的視窗,沒有相應座標值的事件被投遞到主視窗。同一時刻只有一個視窗是主視窗。
大部分時間內,應用視窗是主視窗。由於iOS使用單獨的視窗來顯示警告視圖(alert view)和輸入附件視圖(input accessory view),這些視窗也可以成為主視窗。例如,當一個講稿視圖或者輸入附件視圖有一個文字框,而使用者當前正在這個文字框中輸入,那麼包含此輸入視圖的視窗便是主視窗。
絕大多數應用視窗處在同一等級
當你為應用建立一個新視窗時,UIVindow類自動賦給它一個等級,稱為正常視窗等級(normal window level),這個等級對顯示應用相關內容的視窗是合適的。這個等級,可以通過windowLevel屬性來設定,它代表視窗相對其他視窗在z軸所處的位置。你可以使與應用相關的視窗在其他等級顯示,但這不是必須的。
除了用於顯示應用相關內容的視窗外,還有一些高等級的視窗,他們顯示一些需要懸浮在應用內容之上的資訊。例如系統狀態列和警告等。
具體關於keyWindow和WindowLevel的詳情可以參考:http://www.cnblogs.com/smileEvday/archive/2012/11/16/UIWindow.html