UIWindow 的基本使用

引言:

UIWindow: 是 UIView 的子类,UI的窗口类, 用于显示界面, 一般一个 App 只有一个 window。

作用: 加载试图; 传递触摸事件给内部试图。

我们可以把 window 认为是一个画板,其内部的 view 认为是画纸, 我们一般不会直接操作 window,而是操作其内部的 view。window 是一个试图容器,我们今后在 window 上添加试图才可以显示出来。凡是添加到 window 上的试图,试图的 window 属性不再为空。


# 一. 创建主 window 视图


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

	// 1. 创建一个等屏大小的 window
	self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
	self.window.backgroundColor = [UIColor whiteColor];
	// 2. 把 window 设置为主窗口,并且可见
	[self.window makeKeyAndVisible];
	return YES;
}


# 二. 创建一个半透明的窗口遮盖

如果想要一个视图完全挡住后面的东西, 可以使用 窗口 来实现。

好处: 将两个控制器独立开, 防止前面窗口的点击事件穿透到后面的窗口。

用处: 音乐播放类的 app, 可以用 window 来实现播放器的入口, 这样在任何界面都可以同该窗口进入到播放界面。

注意: 窗口的添加是通过 window.hidden = NO 来显示的, 因为窗口不需要添加到任何的控件上, 任何控件都是添加到窗口上的。

窗口的级别: 通过 window.windowLevel = UIWindowLevelxxx;来设置窗口的级别。

优先级: UIWindowLevelNormal(普通级别) < UIWindowLevelStatusBar(状态栏级别) < UIWindowLevelAlert(弹窗级别) 同级别的窗口, 谁后创建的, 谁的优先级高, 显示在前面。

# 1. 创建窗口:


// 创建窗口
self.window = [[UIWindow alloc] init];
self.window.frame = [UIScreen mainScreen].bounds;
self.window.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.8];
self.window.hidden = NO;
self.window.windowLevel = UIWindowLevelAlert;

// 创建控件
UIView *publishView = [[UIView alloc] init];
publishView.frame = self.window.bounds;
[self.window addSubview:publishView];

/**
注意:
1. window 需要使用全局变量来声明, 不然出了当前方法或者控制器就会被释放掉。
2. 窗口使用完后,要销毁(因为是全局变量) window = nil; 就可以了。
*/