iOS---UIWindow的介绍
程序员文章站
2024-03-22 22:57:28
...
简介
- UIwindow是一种特殊的UIView,通常一个app中只会有一个UIWindow
- ios程序启动完成后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了
- 一个ios程序之所以能显示到屏幕上,完全是因为它有UIWindow,换句话说,没有UIWindow,就看不见任何UI界面
- 状态栏和键盘都是特殊的UIWindow
补充: UIWindow是创建的第一个视图控件,如下图:
先创建UIWindow,再创建控制器,创建控制器的View,然后将控制器的view添加到UIWindow上。
让我们来看看官方文档解释
UIWindow的创建过程
简单说明
在AppDelegate中
@implementation AppDelegate
//系统启动完成时调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//系统创建window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//系统设置创建window的背景颜色
self.window.backgroundColor = [UIColor whiteColor];
//这一句在后面说
self.window.rootViewController = [[ViewController alloc]init];
//设置为主窗口并显示出来
[self.window makeKeyAndVisible];
return YES;
}
- 我们看到系统为我们创建的window属性是strong强引用,是为了不让窗口销毁,所以需要强引用
- 窗口的尺寸必须设置,一般设置为屏幕大小。
view添加到UIWindow
- 直接将控制器的view添加到UIWindow中
[self.window addSubview:vc.view];
- 设置UIWindow的根控制器
self.window.rootViewController = [[ViewController alloc] init] ;
两种方法的区别
在开发中我们经常会使用第二种,不会用到第一种。
- 第一种直接将控制器的view添加到UIWindow中,并不理会它对应的控制器,如若做交互动作需通知控制器时,而控制器已经销毁,则会出现未知的错误
- 当发生屏幕旋转事件的时候,UIapplication对象会将旋转事件传递给UIWindow,UIWindow又会将旋转事件传递给它的根控制器,由根控制器决定是否需要旋转。UIapplication对象 -> UIWindow -> 根控制器(第一种方式没有根控制器,所以不能跟着旋转)
设置根控制器可以将对应界面的事情交给对应的控制器去管理。
上一篇: 支付宝APP支付服务端代码实现
下一篇: iOS离线打包项目升级5+SDK
推荐阅读