更新时间:2021-10-17 06:16:28
UIWindow 是 UIView 的子类,其在 UIView 添加了一些视图层级,管理视图,转发 UIEvent 对象的属性和 Method。
其官方定义是这样的: The backdrop for your app’s user interface and the object that dispatches events to your views.
大意就是: 其是应用程序界面的背景,和将事情分配到视图的对象。
Apple 文档定义:
Windows work with your view controllers to handle events and to perform many other tasks that are fundamental to your app’s operation. UIKit handles most window-related interactions, working with other objects as needed to implement many app behaviors.
大致理解:
UIWindow 与 控制器一起工作, 基本都是设置一个 rootViewController, 来配置一个根控制器, 它能处理大多数响应事件并基本能执行应用程序里面至关重要的任务。监听键盘通知,处理应用程序里面的手势,点击等交互相关事件。 UIKit处理大多数与窗口相关的交互,根据需要与其他对象一起工作以实现许多应用程序行为。这是后面一段话的翻译,没太理解清楚,以免误人子弟,就暂时不写了,理解能力强的指点一下。
通常在一个应用中,只有一个 UIWindow 管理着整个应用程序界面,一般我们通过 Xib 或者 StoreBorad 创建项目时, 都会在 Custom Class 里面的 Class 选项填写上相应的控制器, 这样系统就会自动帮我们制定其为 UIWindow 的根控制器。 否则我们通过纯代码的方式加载的话,都需要手动赋值一个 rooViewController。
除了上面介绍的使用 UIWindow 来管理视图, 相应应用程序事件外, 系统还为我们推荐了几种使用方法。
上面说的几点,可能一下子想象不到具体应用场景,我这里收集了一下分别列举一下:
makeKeyAndVisible : 显示当前窗口,用于显示当前窗口并将其放置在同一级别或更低级别的所有其他窗口的前面。如果只想显示的话,我们还可以通过设置其属性hidden为 NO 即可。
其做了两件事使当前窗口显示出来,并使其成为主要窗口,即可相应应用程序相关事件。
makeKeyWindow: 只做了一件事使当前窗口成为主要窗口。 并不负责将其显示出来。 即时其 windowLevel 值在高都一样。
becomeKeyWindow: 自动调用以通知窗口它已成为关键窗口。 我们不要主动调用此方法, 此方法是系统自动调用的来发通知的.让窗口知道它何时成为主要窗口。此方法的默认实现不执行任何操作,但子类可以覆盖它并使用它来执行与成为关键窗口相关的任务。
resignKeyWindow: 类似becomeKeyWindow, 其是调用以通知窗口它将要注销掉关键窗口的身份.
同样的切勿直接调用此方法。系统调用此方法并发布帖子,让窗口知道它何时不再是键。此方法的默认实现不执行任何操作,但子类可以覆盖它并使用它来执行与重新签名关键窗口状态相关的任务。
参考资料: 官方文档UIWindow