[iOS]UIWindow詳解


★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公眾號:山青詠芝(let_us_code)
➤博主域名:https://www.zengqiang.org
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/12190314.html
➤如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持作者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

熱烈歡迎,請直接點擊!!!

進入博主App Store主頁,下載使用各個作品!!!

注:博主將堅持每月上線一個新app!!!

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM