美文网首页
深入了解iOS UIWindow

深入了解iOS UIWindow

作者: Sakumi | 来源:发表于2022-06-20 15:34 被阅读0次

    简介

    概念

    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

          本文链接:https://www.haomeiwen.com/subject/zvdjvrtx.html