[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
了;
总结:
UIWindowLevel
的值不仅仅只有UIWindowLevelNormal
、UIWindowLevelAlert
、UIWindowLevelStatusBar
这三个,可以是自定义的随意值,哪怕是负数UIWindow
的显示的确可以通过UIWindowLevel
来区分优先级,所有的window都会被加在界面上,只不过会通过优先级罗列起来,UIWindowLevel
大的在上面显示,UIWindowLevel
小的在下面显示。UIWindowLevel
优先级相等的情况下,看谁后实例化了,谁后实例化谁先显示- 如果将当前
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