UIWindow一日游

? ? ? ? 今天工作不是很繁忙,突然看到APP里的分享界面上無法被陰影遮蓋住的狀態欄,頓生想要解決這個視而不見已久問題的想法。

? ? ? ? 之前的做法一直都是直接把陰影視圖直接add到keyWindow上,這樣的做法是無法把狀態欄壓在身下的。其實之前思考過這個問題,感覺和window有關。今天隨便一搜,發現UIWindowLevel這么個玩意,瞬間秒懂。是不是我把window的這個屬性設置成UIWindowLevelAlert就能和UIAlertView一樣蓋住狀態欄了呢。

? ? ? ? 嗯。沒錯。。機智的我立馬在原來代碼里把keyWindow的windowLevel設置成了UIWindowLevelAlert,在移除陰影后把keyWindow的level設置為normal。。Amazing,狀態欄果然被蓋住了。但是不是被陰影而是被整個keyWindow蓋住了。

? ? ? ? 機智的我瞬間明白了其中的奧妙,隨即想出了替代方案,自己創建一個window,將其level設置成UIWindowLevelAlert,把陰影加到上面去,makeKeyAndVisible。然后在要消失陰影的時候讓之前的keyWindow,makeKeyAndVisible,再把自己創建的window置為空,完美~

? ? ? ? 試了一下,效果拔群。哦吼,機智的我又想到了,既然這么多地方都用到,干脆寫個小輪子得了。

? ? ? ? 然后,重點來了,當我把在APP工程里的行為復刻到新建的工程里,發現效果并不像在APP里一樣,自己創建的window并沒有消失。只有當我在點擊一下屏幕時,window才會消失并被釋放。

寫了那么多沒用的,其實我想說的就是以下幾點,也是今天對于UIWindow的發現。

1、要讓自己創建的window顯示出來有兩種方法:

? ? ? ? 1、makeKeyAndVisible

? ? ? ? 2、直接設置它的hidden屬性為NO

2、要隱藏自己創建的window,請直接設置其hidden屬性為YES,如果window是keyWindow的話還需還原原來的keyWindow。

3、其實當自己創建的window被hidden后,application任然會在windows數組里保留window,window也沒有被釋放,只有當再次點擊屏幕時,才會被真正釋放,至于具體的原因我也沒有去探究,猜測和ARC自動釋放有關吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • UIWindow 簡介 一個UIWindow對象為應用程序的用戶界面提供了背景以及重要的事件處理行為。UIWind...
    ripperhe閱讀 23,664評論 24 58
  • *7月8日上午 N:Block :跟一個函數塊差不多,會對里面所有的內容的引用計數+1,想要解決就用__block...
    炙冰閱讀 2,542評論 1 14
  • UIView的功能 負責渲染區域的內容,并且響應該區域內發生的觸摸事件 UIWindow 在iOS App中,UI...
    小蘑菇2閱讀 796評論 4 5
  • 一、UIWindow是一種特殊的UIView,通常在一個app中只會有一個UIWindow。 iOS程序啟動完畢后...
    MrLXQ閱讀 1,077評論 0 3
  • 《5月 提筆寫作》鏈接目錄 6月 心靈修行 目錄(更新中) 關于馬盤的爭議(6月1日) 馬克思盤學習入門筆記(6月...
    晚晚inna閱讀 273評論 0 0