UIWindow讲解

1.UIWindow & UIWindowLevel

一、简单介绍UIWindow是什么?

UIWindow是一种特殊的UIView,UIWindow继承自UIView,也就是说它本身就是一个视图的容器。通常一个App一般有一个UIWindow,也就是AppDelegate中的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的生命周期的维护,防止其过早释放

三、WindowLevel

UIWindow在显示的时候会根据UIWindowLevel进行排序的,即Level高的将排在所有Level比他低的层级的前面。下面我们来看UIWindowLevel的定义:

 const UIWindowLevel UIWindowLevelNormal;
 const UIWindowLevel UIWindowLevelAlert;
 const UIWindowLevel UIWindowLevelStatusBar;
 typedef CGFloat UIWindowLevel;

IOS系统中定义了三个window层级,其中每一个层级又可以分好多子层级(从UIWindow的头文件中可以看到成员变量CGFloat _windowSublevel;),不过系统并没有把则个属性开出来。UIWindow的默认级别是UIWindowLevelNormal,我们打印输出这三个level的值分别如下:

UIViewSample[395:f803] Normal window level: 0.000000
UIViewSample[395:f803] Alert window level: 2000.000000
UIViewSample[395:f803] Status window level: 1000.000000

window在创建的时候,默认是UIWindowLevelNormal(0.0),这个值越大,层次越靠上,也就是说

windowLevel大于0,小于1000的时候,在statusbar之下,在默认的window之上
windowLevel大于1000的时候,就在statusbar之上了。

2. keyWindow

keyWindow是获取键盘和其他非触摸事件的window,同一时间只能有一个window为keywindow。所以,如果自己创建的Window要相应除触摸外的事件,要设置为keyWindow.

makeKeyWindow //设置当前window为main window.

keyWindow的”生命周期”
这两个方法类似于viewWillAppear等,自动触发,不要手动调用。

- becomeKeyWindow
- resignKeyWindow

所以,以后需要呈现在顶部的视图,要添加到UIApplication.sharedApplication()
.keyWindow 上。

keyWindow 确保了你一定能拿到当前活跃的window,文档中是这样描述 keyWindow 的:

原则上是只有一个window与用户交互,但不代表就只存在一个window。Alert也是一个window

keyWindow就是指活跃的window。

iphone键盘也在一个window里,叫UITextEffectsWindow;
window可以层叠的,各个window都可以被响应。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容