IOS 之 UIWindow 详解

一、UIWindow特点

(1)UIWindow 是一种特殊的 UIView,通常在一个 app 中至少会有一个 UIWindow;

(2)iOS程序启动完毕后,创建的第一个视图控件就是 UIWindow,接着创建控制器的 view,最后将控制器的 view 添加到 UIWindow 上,于是控制器的 view 就显示在屏幕上了;

(3)一个iOS程序之所以能显示到屏幕上,完全是因为它有 UIWindow,也就说,没有UIWindow,就看不见任何UI界面。

二、添加 UIView 到 UIWindow 中两种常见方式:

(1)- (void)addSubview:(UIView )view;*

直接将 view 添加到 UIWindow 中,但并不会理会 view 对应的 UIViewController;

(2)@property(nonatomic,retain) UIViewController *rootViewController;

自动将 rootViewController 的 view 添加到 UIWindow 中,负责管理 rootViewController 的生命周期。不同于前者(1)的是,比前者多一个屏幕旋转功能,只会相对转屏,而不会整体(包括状态栏)都旋转,所以推荐使用前者。

三、UIWindow 常用方法

- (void)makeKeyWindow;

让当前 UIWindow 变成 keyWindow(主窗口);

- (void)makeKeyAndVisible;

让当前 UIWindow 变成 keyWindow,并显示出来。

四、UIWindow 的获得

[UIApplication sharedApplication].windows

在本应用中打开的 UIWindow 列表,这样就可以接触应用中的任何一个 UIView 对象;
(平时输入文字弹出的键盘,就处在一个新的 UIWindow 中)

[UIApplication sharedApplication].keyWindow

用来接收键盘以及非触摸类的消息事件的 UIWindow,而且程序中每个时刻只能有一个 UIWindow 是 keyWindow。如果某个 UIWindow 内部的文本框不能输入文字,可能是因为这个 UIWindow 不是 keyWindow。

五、UIWindow 创建步骤

IOS 之 UIWindow 详解_第1张图片

实例代码说明:

(1)创建窗口对象;
注意点:1.不要让窗口销毁,需要弄一个强引用;2.必须要设置窗口的尺寸。

(2)创建窗口的根控制器,并且赋值;

注意点:苹果推荐使用控制器的原因,对应界面的事情交给对应的控制器去管理。一旦设置窗口的根控制器,就会把跟控制器的 view 添加到窗口

(3)显示窗口。

[self.window makeKeyAndVisible];

makeKeyAndVisible:
1 可以显示窗口;底层实现为: self.window.hidden = NO;
2 成为应用程序的主窗口;底层实现为:application.keyWindow = self.window;

六、UIWindow 层级

self.window.windowLevel = UIWindowLevelAlert;

UIWindow 有三个层级:UIWindowLevelAlert, UIWindowLevelStatusBar, UIWindowLevelNormal, 其中,优先级为:UIWindowLevelAlert > UIWindowLevelStatusBar > UIWindowLevelNormal.

值得注意的是,优先级变量是可以作加减运算的,这是因为 windowLevel 是 CGFloat 类型。

你可能感兴趣的:(iOS,开发)