IOS开发概述-08.UIWindow

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在最下面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值