iOS關(guān)于UIWindow

UIWindow簡介:

在iOS App中,UIWindow是最頂層的界面內(nèi)容,我們使用UIWindow和UIView來呈現(xiàn)界面。UIWindow并不包含任何默認的內(nèi)容,但是它被當作UIView的容器,用于放置應用中所有的UIView。

從繼承關(guān)系來看,UIWindow繼承自UIView,所以UIWindow除了具有UIView的所有功能之外,還增加了一些特有的屬性和方法,而我們最常用的方法,就是在App剛啟動時,調(diào)用UIWindow的makeKeyAndVisible方法。

為UIWindow增加UIView:

通常我們有兩種辦法給UIWindow增加子UIView:

1.通過調(diào)用addSubView方法,因為UIWindow是UIView的子類,所以它可以使用UIView的addSubView方法給自己增加子UIView,從而承擔容器的作用;

2.通過設(shè)置其特有的rootViewController屬性。設(shè)置該屬性后,UIWindow會自動將view controller的view添加到當前window中,同時負責維護view controller和view的生命周期。上述在application:didFinishLaunchingWithOptions:中使用的就是這種辦法;

系統(tǒng)對UIWindow的使用:

通常在一個程序中只會有一個UIWindow,但有些時候我們調(diào)用系統(tǒng)的控件(例如UIAlertView)時,iOS系統(tǒng)為了保證UIAlertView在所有的界面之上,它會臨時創(chuàng)建一個新的UIWindow,通過將其UIWindowLevel設(shè)置更高,讓UIAlertView蓋在所有其他UI之上

windowLevel

那是不是新創(chuàng)建的UIWindow一定會覆蓋在界面的最上面呢?其實并不是這樣的。UIWindow有一個UIWindowLevel類型屬性windowLevel,該屬性指示了UIWindow的層級,windowLevel有三種可取值,如下所示:

UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar;

把這幾個值打印出來,得到結(jié)果如下:

UIWindowLevelNormal=0.000000
UIWindowLevelAlert=2000.000000
UIWindowLevelStatusBar=1000.000000

從中能夠看出,默認程序的UIWindow的層級是UIWindowLevelNormal,當系統(tǒng)需要覆蓋在其上覆蓋UIAlertView時,就會創(chuàng)建一個層級是UIWindowLevelAlert的UIWindow,**因為其windowLevel值更高,所以就覆蓋在上面了。

手工創(chuàng)建UIWindow

有些時候,我們也希望在應用開發(fā)中,將某些界面覆蓋在所有界面的最上層。這個時候,我們就可以手工創(chuàng)建一個新的UIWindow。需要注意的是,和創(chuàng)建UIView不同,UIWindow一旦被創(chuàng)建,它就自動地被添加到整個界面上了(當然,其windowLevel要足夠高)。
還有一點需要注意的是,如果我們創(chuàng)建的UIWindow需要處理鍵盤事件,那就需要合理地將其設(shè)置為keyWindow。keyWindow是被系統(tǒng)設(shè)計用來接收鍵盤和其他非觸摸事件的UIWindow。我們可以通過makeKeyWindow和resignKeyWindow方法設(shè)置UIWindow實例的keyWindow與否。

參考自張不壞的博客

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

推薦閱讀更多精彩內(nèi)容

  • 二、使用UIWindow 1、簡介在iOS App中,UIWindow是最頂層的界面內(nèi)容,我們使用UIWindow...
    南華coder閱讀 2,771評論 0 9
  • 一、問題背景 最近需求量放緩,想起了以前曾經(jīng)later的小需求,也就是彈出來的AlertView中間的文本框輸入一...
    唐笛_Dylan閱讀 18,470評論 6 29
  • UIView的功能 負責渲染區(qū)域的內(nèi)容,并且響應該區(qū)域內(nèi)發(fā)生的觸摸事件 UIWindow 在iOS App中,UI...
    小蘑菇2閱讀 796評論 4 5
  • 果果: 看著你一秒鐘就進入夢鄉(xiāng),不禁心生佩服,玩得歡、吃得香、睡的甜的童年。 越來越感覺到,你和我有那么多細微的相...
    熱帶毛毛蟲閱讀 176評論 1 5
  • 一個人會有很奇怪的夢: 一本厚厚的羊皮卷, 生銹的銅鎖, 塵土飛揚… … 一些蒙著臉的探險家, 疲憊的駝鈴, 和同...
    醉花令閱讀 368評論 0 0