UIWindow是一个特殊的view,一般在应用程序中只有一个UIWindow。
UIWindow的作用:
1.它是一个容器,用来盛放视图,它本身不做显示,是UIView视图做绘图操作。
2.它与视图控制器一起协作来呈现数据
3.它为视图和其他控制器对象的触摸起到关键性作用,分发事件给View。
如何使用UIWindow呢?
1、创建UIWindow
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
2、设置其rootViewController
txMainViewController * mainViewController = [[txMainViewController alloc] initWithNibName:nil bundle:nil];
self.window.rootViewController = mainViewController;
3、将window设为keyWindow且使其可见
[self.window makeKeyAndVisible];
UIWindow的常用属性:
1)windowLevel
UIWindowLevel 类型,多个 UIWindow 的显示顺序是按照 windowLevel 从高到低排列的,windowLevel 最高的显示在最前面。比如:windowLevel 较高的 UIAlertView 警告窗口会显示在一般窗口的前面。UIWindowLevel 类型的定义如下:
const
UIWindowLevel UIWindowLevelNormal; // 默认等级
const UIWindowLevel UIWindowLevelAlert; // UIAlertView 的等级
const UIWindowLevel UIWindowLevelStatusBar; // 状态栏的等级
typedef CGFloat UIWindowLevel;
从 UIWindowLevel 的定义可知,windowLevel 的值其实是一个 CGFloat 类型,我们将系统预设的三个等级打印出来,他们的值如下:
UIWindowLevelNormal:0.000000
UIWindowLevelAlert:2000.000000
UIWindowLevelStatusBar:1000.000000
UIWindowLevelNormal
< UIWindowLevelStatusBar < UIWindowLevelAlert
而当你需要一个额外的 UIWindow,并且此 UIWindow 需要显示在 UIAlertView 的前面,可以将此 windowLevel 设置为 :UIWindowLevelAlert + 1,那么此 UIWindow 与 UIAlertView
同时显示时,此 UIWindow 将显示在 UIAlertView 前面。
如果有多个UIWindow,且其UIWindowLevel都相同,那先调用 makeKeyAndVisble 的会一直显示在前面。
2)keyWindow
BOOL 类型,只读,用于判断是否是当前应用的 key window (key window 是指可接收到键盘输入及其他非触摸事件的 UIWindow,一次只能有一个 key window)
3)rootViewController
rootViewController :UIViewController 类型,iOS 4.0新增属性,设置此属性后,rootViewController 所包含的 view 将被添加到 UIWindow 中,iOS 4.0之前版本可采用 addSubview: 方法达到同样的效果,因为 UIWindow 类本身就是 UIView 的子类。
4) screen
IOS物理设备的替代者,【【UIScreen mainScreen】bounds]获取设备大小,如果iphone和iPad的尺寸不一样,如果做适配要用该属性。
UIWindow的常用方法:
-
makeKeyWindow :将当前 UIWindow 设置成应用的 key window。
makeKeyAndVisible :将当前 UIWindow 设置成应用的 key window,并使得 UIWindow 可见;你也可以使用 UIView 的 hidden 属性来显示或者隐藏一个 UIWindow。