您的位置:首页 > 产品设计 > UI/UE

IOS开发概述-08.UIWindow

2015-07-28 21:11 399 查看

1.UIWindow概述

UIWindow是一种特殊的UIView,通常在一个app中只有一个UIWindow

IOS程序启动完毕后,创建的第一个视图控件就是UIWidnow,接着创建控制器的View,最后将控制器的View添加到UIWindow,于是控制器的View就显示上在屏幕上了

一个IOS程序之所以能够显示在屏幕上,就是因为有UIWindow

也就是说没有UIWindow,就看不见任何界面

2.通过查询Xcode文档





3.UIWindow创建过程

要想利用代码重现UIWindow的创建过程,需先将指定从Storyboard加载设置去掉

Storyboard加载设置去掉图片

代码重现UIWindow的加载,需在AppDelegate类中实现

// 程序启动完成后调用此方法
// 加载完info.plist文件后程序才算启动完毕
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 1.窗口要想显示,必须强引用,必须设置frame
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

// 2.设置窗口的根控制器
UIViewController *vc = [[UIViewController alloc] init];
vc.view.backgroundColor = [UIColor orangeColor];
// 设置窗口的根控制器,底层会自动将控制器的View添加到Window上,并且让控制器的View具有旋转功能
self.window.rootViewController = vc;
/*
// 若是不设置根控制器,仅仅将控制器的View添加到窗口上
[self.window addSubview:vc.view];
// 会导致如下问题
1.当view上发生一些事件的时候,通知控制器,但控制器可能被销毁了,可能出现一些未知的错误
2.当发生旋转事件的时候,UIApplication会将旋转事件传递给UIWindow,UIWindow又将旋转事件传递给它的根控制器,由根控制器决定是否需要旋转
*/

// 3.设置窗口为程序的主窗口并显示在屏幕上
[self.window makeKeyAndVisible];
// 系统底层先将窗口设置为应用程序的主窗口,并且将window的hidden属性设置为NO
//    application.keyWindow = self.window;
//    self.window.hidden = NO;
return YES;
}


4.IOS应用程序启动完整过程总结

1.main函数

2.UIApplicationMain函数

创建UIApplication对象

创建UIApplication的代理对象(代理实现UIApplicationDelegate协议),并设置为UIApplication的代理

3.开启主运行循环,代理对象开始监听处理系统事件(没有storyboard情况)

程序启动完毕的时候,就会调用代理方法- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions

在该方法中创建UIWindow

创建并设置UIWindow的根控制器rootViewController

显示窗口

3.根据info.plist获得最主要的storyboard的文件名,并加载storyboard(有storyboard)

创建UIWindow

创建并设置UIWindow的根控制器rootViewController

显示窗口

5.UIWindow优先级说明

// 应用程序中还有哪些是UIWindow,状态栏、键盘
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 1.创建UIWindow
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 1.1设置窗口的背景颜色
self.window.backgroundColor = [UIColor yellowColor];
// 1.2设置窗口的层级
/* 窗口层级为CGFloat 常量
UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal; 0
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert; 2000
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar; 1000
*/
self.window.windowLevel = UIWindowLevelStatusBar;
// 1.3显示窗口
[self.window makeKeyAndVisible];
// 1.4添加弹出键盘文本框
UITextField *textfield = [[UITextField alloc] init];
[textfield becomeFirstResponder];
[self.window addSubview:textfield];

// 窗口的层级的级别 UIWindowLevelAlert > UIWindowLevelStatusBar > UIWindowLevelNormal,谁大就谁显示在最外面

// 2.创建窗口1
self.window1 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 300, 300, 300)];
// 2.1.设置窗口1的背景颜色
self.window1.backgroundColor = [UIColor blueColor];
// 2.2显示窗口1
[self.window1 makeKeyAndVisible];
// 2.3设置窗口1的优先级
self.window1.windowLevel = UIWindowLevelAlert;
return YES;
}
// 结果是window1显示在最外面,键盘在window之上,window在最下面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: