首先我们来说说UIWindow,UIWindow继承自UIView,也就是说,它也是可见的视图,根据官方文档的解释:
The UIWindow class defines an object known as a window that manages and coordinates the views an app displays on a device screen. Unless an app can display content on an external device screen, an app has only one window.
UIWindow类定义了一个window对象来管理和协调一个应用在一台设备屏幕上展示的视图。除非一个应用可以在一个外部设备上面展示内容,否则一个应用只有一个窗口。
创建一个window对象之后,只有调用了makeKeyAndVisible这个方法以后,我们才能在模拟器上看到这个window,这个方法包含了两层意思。一层意思是makeKey,window有keyWindow和非keyWindow之分。我们可以通过方法[UIApplication shareApplication].keyWindow来找到一个应用的主窗口。那么什么是主窗口呢,上官方文档:
The app's key window. (read-only)
This property holds the UIWindow object in the windows array that is most recently sent the makeKeyAndVisible message.
应用的主窗口(只读)
这个属性持有了在windows数组中最新发送makeKeyAndVisible这个消息的window。
而对makeKeyAndVisible这个方法的解释是
Makes the receiver the key window and visible.
This is a convenience method to make the receiver the main window and displays it in front of other windows at the same window level or lower. You can also hide and reveal a window using the inherited hidden property of UIView.
使接收器成为主窗口并且可见
这是个便捷的方法可以使接收器成为主窗口并且在和它的windowLevel同级或者比它的windowLevel要低的窗口前面展示内容.你也可以使用window由UIView继承来的hidden属性来隐藏和显示它。
大概了解了UIWindow是什么。但是还有些问题不是很清楚。
1.首先,除了makeKeyAndVisible方法之外,还有一个方法叫做makeKey,就是只让一个窗口作为主窗口响应事件,但是不显示出来。不明白这个方法的意义何在,什么情况下会用到这个方法而不用makeKeyAndVisible。
2.关于UIWindowLevel这个枚举值,
const UIWindowLevel UIWindowLevelNormal;
const UIWindowLevel UIWindowLevelAlert;
const UIWindowLevel UIWindowLevelStatusBar;
不是说一个应用只有一个window吗?那为什么还要这个枚举值来管理许多window呢,到底什么情况下会有很多window。 |
|