zoukankan      html  css  js  c++  java
  • [iOS]UIWindow详解

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(let_us_code)
    ➤博主域名:https://www.zengqiang.org
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/12190314.html
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    UIWindowLevel

    关于 UIWindowLevel 我想多说几句, UIWindow 在显示的时候会根据 UIWindowLevel 进行排序的,即 Level 高的将排在最前面.默认是 0

    open var windowLevel: UIWindowLevel // default = 0.0

    系统为我们定义了三个window层级,即:

    1 public let UIWindowLevelNormal: UIWindowLevel
    2 public let UIWindowLevelAlert: UIWindowLevel
    3 public let UIWindowLevelStatusBar: UIWindowLevel

    打印输出这三个level的值查看下:

    1 STWLog("UIWindowLevelNormal: (UIWindowLevelNormal)")
    2 STWLog("UIWindowLevelStatusBar: (UIWindowLevelStatusBar)")
    3 STWLog("UIWindowLevelAlert: (UIWindowLevelAlert)")

    什么是 keWindow ? 我们来查看下官方文档是怎么描述的:

     
     

    也就是说在 windows 数组中,最近时间调用了 makeKeyAndVisible 方法的就是 keyWindow了;

    总结:

    1. UIWindowLevel 的值不仅仅只有 UIWindowLevelNormalUIWindowLevelAlertUIWindowLevelStatusBar 这三个,可以是自定义的随意值,哪怕是负数
    2. UIWindow 的显示的确可以通过 UIWindowLevel 来区分优先级,所有的window都会被加在界面上,只不过会通过优先级罗列起来,UIWindowLevel 大的在上面显示,UIWindowLevel 小的在下面显示。
    3. UIWindowLevel 优先级相等的情况下,看谁后实例化了,谁后实例化谁先显示
    4. 如果将当前 KeyWindow对象设置为 nil 则该对象会从 Windows数组中移除,并且最后实例化的Window对象将成为 KeyWindow ,但是依然遵循总结2中的描述,UIWindowLevel 大的在上面显示,UIWindowLevel 小的在下面显示。
     
    示例代码:
     1 //MARK:添加搜索窗体
     2     func addWindow(_ controller:UIViewController,_ frame: CGRect)
     3     {
     4         //窗体大小位置
     5         self.window = UIWindow(frame: frame)
     6         //窗体绑定的视图控制器
     7         self.window?.rootViewController = controller
     8         //背景色透明
     9         self.window?.backgroundColor = UIColor.clear
    10         //判断是否为空
    11         if self.window != nil
    12         {
    13             self.window!.windowLevel = UIWindow.Level.alert + 1
    14             //不隐藏
    15             self.window!.isHidden = false
    16             //显示窗体
    17             self.window!.makeKeyAndVisible()
    18             //增加对iOS 13的支持代码
    19             if #available(iOS 13.0, *)
    20             {
    21                 if let currentWindowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
    22                     self.window!.windowScene = currentWindowScene
    23                 }
    24             }
    25         }
    26     }

    隐藏窗体属性:

    1 //是否隐藏
    2 window?.isHidden = show
     
  • 相关阅读:
    Prometheus监控神器-服务发现篇(二)
    Prometheus监控神器-服务发现篇(一)
    Prometheus监控神器-Alertmanager篇(4)
    Prometheus监控神器-Alertmanager篇(3)
    Prometheus监控神器-Rules篇
    Linux内核分析——字符集总结与分析
    Linux内核分析——ELF文件格式分析
    Linux内核分析——程序破解
    Linux内核学习总结
    《Linux内核设计与实现》课本第四章学习总结
  • 原文地址:https://www.cnblogs.com/strengthen/p/12190314.html
Copyright © 2011-2022 走看看