UIWindow的讲述以及底层

一.先对UIWindow做一个简单的介绍

  • 1.UIWindow 是一种特殊的UIView,通常在一个app中至少会有一个UIWindow

  • 2.iOS程序启动完毕后,创建的第一个视图空间就是UIWindow,接着创建控制器的view,最后将控制器的view 添加到UIWindow上,于是控制器的view 就显示在屏幕上了

  • 3.一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow

  • 4.也就是说没有UIWindow,就看不见任何UI界面

二.简述一下UIWindow在AppDelegate里面底层的实现

 //加载info.plist,并且做出判断,判断有没有main,就不会帮你创建窗口,自己动手创建
 //程序启动完成时的调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{

 /* 窗口现实的注意点
  * 1.不要让窗口销毁,需要弄一个强引用
  * 2.必须要设置窗口的尺寸
  *
  */

  //1.创建窗口对象
  self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
  //2.创建窗对象的根控制器并且赋值
  //苹果推荐使用根控制器的原因,对应界面的事情交给对应的控制器去管理,一旦设置了窗口的根控制器,就会把控制器的view添加到窗口
  self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[ViewController new]];
  //3.显示窗口
  [self.window makeKeyAndVisible];

  return YES;
}
  • 1.先解释一下为什么用根控制器而不选择addSubview

    它可以使屏幕具有旋转的功能

  • 2.解释[self.window makeKeyAndVisible];

它的作用:

  1. 可以显示窗口 self.window.hidden = NO
  2. 成为主窗口  application.keyWindow = self.window;

** 三.对UIWindow的补充:哪些平常见的是窗口???

  • 1.状态栏是一个比较特殊的窗口

  • 2.键盘也是一个窗口

  • 3.打印所有的窗口(以数组的形式展示)

    NSLog(@"打印所有窗口%@",application.windows);
    

四.UIWindow的层级表示以及设置

  • 1.层级越高就越在最上面,键盘的层级比较高
  • 2.窗口层级的设置(自己你可以设置几个Window)
    (1).UIWindowLevelNormal(默认)
    (2).UIWindowLevelAlert,
    (3).UIWindowLevelStatusBar
    层级顺序
    UIWindowLevelAlert > UIWindowLevelStatusBar > UIWindowLevelNormal
    层级的设置
    self.window.windowLevel = UIWindowLevelAlert;
  • 3.层级可以进行加减的
UIWindow的讲述以及底层_第1张图片

加减的效果

UIWindow的讲述以及底层_第2张图片

最后感谢您的阅读,记得点击喜欢哦!!!

你可能感兴趣的:(UIWindow的讲述以及底层)