1.步驟
在程序啟動的時候,就會執(zhí)行這3步瓮恭,和代碼創(chuàng)建窗口不同之處雄坪,在于代碼創(chuàng)建窗口,是調(diào)用的時候才創(chuàng)建的屯蹦,而且通過storyboard加載程序维哈,窗口都交給storyboard管理,不需要自己管理登澜。
根據(jù)Info.plist獲得最主要storyboard的文件名,加載最主要的storyboard(有storyboard)阔挠。
*創(chuàng)建UIWindow
*創(chuàng)建和設(shè)置UIWindow的rootViewController
*顯示窗口
2.手動創(chuàng)建UIWindow
2.1>在程序啟動完的方法里創(chuàng)建,并且給appDelegate的window賦值
2.2>必須調(diào)用[self.window makeKeyAndVisible];才能顯示窗口脑蠕。
2.3>有了窗口购撼,接下來應(yīng)該把控制器的view顯示到窗口上跪削。
2.4>自定義控制器
2.5> addSubView,把控制器的view添加到窗口
2.6>設(shè)置窗口的根控制器rootViewController,會自動把控制器的view添加到窗口。
3.addSubView和rootViewController的區(qū)別
1>直接用addSubView迂求,控制器會被釋放碾盐,控制器就不能處理事件
2>直接用addSubView,控制器的view不會自動旋轉(zhuǎn)揩局。
3>用rootViewController毫玖,控制器不會被釋放,而且控制器的view會自動旋轉(zhuǎn)
4>旋轉(zhuǎn)事件-> UIApplication -> Window -> rootViewController ->旋轉(zhuǎn)控制器的view
4.addSubView和rootViewController的區(qū)別
1>直接用addSubView凌盯,控制器會被釋放付枫,控制器就不能處理事件
2>直接用addSubView,控制器的view不會自動旋轉(zhuǎn)驰怎。
3>用rootViewController阐滩,控制器不會被釋放,而且控制器的view會自動旋轉(zhuǎn)
4>旋轉(zhuǎn)事件-> UIApplication -> Window -> rootViewController ->旋轉(zhuǎn)控制器的view
5.為什么要用跟控制器開發(fā)县忌,沒有跟控制器一樣能顯示界面掂榔。
?以后可能會有很多界面,為了避免代碼結(jié)構(gòu)清晰芹枷,通過一個界面交給一個控制器管理
rootViewControllerd的常見用處:切換控制器衅疙,比如新特性界面展示完成,切換到主界面鸳慈,這時銷毀控制器就好了饱溢,新特性界面就會自動銷毀,它只需要展示一次就好了走芋。
6.UIWindow補(bǔ)充
6.1>自己創(chuàng)建窗口,窗口顯示出來绩郎,兩個條件。1.makeKeyAndVisible2.窗口不要被釋放了
6.2>keyWindow:makeKeyAndVisible會讓窗口成為主窗口翁逞,并且顯示出來肋杖。
在創(chuàng)建一個窗口顯示出來,一個應(yīng)用程序只有一個主窗口挖函,并且顯示出來的窗口状植,
application管理,application有個Windows數(shù)組怨喘,存放顯示出來的窗口津畸,有一個例外,狀態(tài)欄也是一個窗口必怜,但是沒有交給application管理肉拓。打印application.windows。
6.3>創(chuàng)建的窗口交給windows這個數(shù)組管理: ?
6.4>還有那些是窗口?鍵盤也是窗口梳庆,創(chuàng)建一個textField成為第一響應(yīng)者暖途, 并且加到最里面卑惜,顯示在最前面, 打印application.windows驻售,就知道了露久。
6.5>為什么他們會顯示在最前面,因?yàn)榇翱谟袑蛹壠劾酰麄兊膶蛹壐?/p>
UIWindowLevelNormal :默認(rèn)窗口的層級
UIWindowLevelStatusBar :狀態(tài)欄,鍵盤抱环、
UIWindowLevelAlert:UIActionSheet,UIAlearView
6.6> windowLevel:UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
6.7>把window的層級設(shè)置為UIWindowLevelAlert,就會顯示在最前面纸巷。
/**
loadView作用:加載控制器的view
loadView什么時候掉用:當(dāng)控制器的view第一次使用的時候就會掉用
在開發(fā)中沒有l(wèi)oadView中掉用[super loadView];
在開發(fā)中什么時候使用:只要想自定義控制器的view就掉用這個方法
最好不要使用view的get方法
底層實(shí)現(xiàn):判斷下又沒有制定storyboard,如果有,就會幫你創(chuàng)建storyboard描述的控制器的view眶痰,如果沒有瘤旨,則創(chuàng)建一個空的view
*/
- (void) loadView
{
NSLog(@"%s", __func__);
//? ? [super loadView];
BGView *view = [[BGView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.view = view;
self.view.backgroundColor = [UIColor blueColor];
}