深入了解iOS UIWindow

简介

概念

UIWindow是iOS中用于显示内容、处理触控等功能的基础

重要知识

  1. 每个app必须要有一个keyWindow才能正常运行,如果是通过代码创建的项目,需要为AppDelegate创建一个window,并调用makeKeyAndVisible()来让window显示。当然不要忘了设置window的rootViewController
  2. window通过windowLevel来决定window显示的层级,也就是z轴的值。系统定义了normal, statusBar, alert三个层级,当前这个windowLevel本质是个rawValue为Int的枚举,所以我们可以按需要创建任意层级的level。如在statusBar上,在alert下的层次

常用方法

  1. 通过设置rootViewController来更换场景。
    • 如登录完成后,要进入主页面,此时登录相关的页面可以释放,替换成主页面相关的控制器
  2. 通过keyWindow.addSubview()在最上层的视图上面显示内容。
    • 如当前控制器可能被嵌入在UINavigationController或者UITabBarController里,上方的导航栏和下面的tabBar被不属于子控制器,而我们想把内容全屏显示。
    • 如在网络层或者某些Model层想展示一个toast,此时不方便获取到目前现在显示的视图
  3. 通过新建一个windowLevel更高的UIWindow,来实现某些内容永远处于最上面。
    • 如想实现一个浮动按钮,不会被任何其他内容遮盖。
    • 如某些游戏会在进入前台时同步数据,同步时用动画要遮住正常内容,以防用户改时间作弊。
  4. 全屏的显示或者横屏显示内容
  5. 通过window的safeInset来确定是不是刘海屏。

延伸

在用 UIApplication.shared.keyWindow 获取keyWindow时,现在会出现一个该属性被废弃的警告。

出现这个警告的原因是,iOS 13 之后,一个app可能有多个scene,也就是说可能有多个keyWindow,所以该属性被废弃。

如果app没有多个scene,使用该方法获取keyWindow是完成没问题的。

你可能感兴趣的:(深入了解iOS UIWindow)