UIWindow小結


引言:開發過程中有時候會需要一種情形例如百思不得姐,或者新浪微博的中間的發佈按鈕點擊,彈出一個界面的場景,這種情況一種解決辦法是直接搞一個控制器,然後點擊的時候讓根控制器直接moda出來這個控制器,設置一下不需要動畫即可達到效果,但是這樣的情況不能做到彈出的同時還能看到後面的原來的控制器的內容,因爲moda的時候,之前的根控制器系統已經把他從窗口中移除了,但是還沒有銷燬,還在內存中,當彈出的消失的時候,系統再把根控制器移到窗口顯示,這種情況下顯然不可能看到根控制器的內容,因爲他已經不在顯示了,所以,如果想要半透明同時看到後天的跟控制器的內容的時候,顯然不可以使用系統的moda。這時候一般有以下兩種做法:

一:彈出的視圖不用控制器來呈現,直接用一個UIView,然後把它加到keyWindow的上面,然後設置一下透明度即可做到不僅看到彈出視圖,還可以看到後面的根控制器的內容,但是這種情況下,執行動畫的過程中,要注意設置相應的載體的userInterFace爲NO,這裏不再介紹這個具體的設置,總體上要考慮的比較多,也比較繁瑣。

二:這裏是要引出的最終的辦法——自定義UIwindow。優點一:不必考慮userinterFace 的繁瑣設置,因爲彈出一個UIWindow,蓋在最上面的話,默認就可以攔截所有的點擊,不會透傳到下面的根控制器。優點二:可以掌握UIwindow的使用技巧啊,提示自己啊,哈哈哈~~~

下面首先介紹一下UIwindow的相關知識點;

UIWindow知識點一:

<span style="font-family:SimSun;font-size:14px;">    // 創建窗口
    window_ = [[UIWindow alloc] init];
    window_.frame = [UIScreen mainScreen].bounds;
    window_.hidden = NO;</span>
<span style="font-family:SimSun;font-size:14px;">//注意上面的命名習慣,一般全局變量下劃線在後面,成員變量下劃線在前面,常量以工程前綴開始。</span>
注意,上面創建完成後,不需要添加到誰的上面,因爲所有的UIView都是添加到UIWindow上面纔可以顯示的,UIWindow就是老大,沒有必要添加到誰上面,直接設置hidden爲No就可以顯示了,並且通常要顯示一個UIWindow時,一般是調用一個window的

[window_ makeKeyAndVisible]方法,其實這個方法的內部也就是做了兩件事,一個是設置爲主窗口,即可

[window_ makeKeyWindow],另一個就是設置hidden爲NO。


UIWindow知識點二:

UIWindow有一個重要的屬性,即窗口級別:windowLevel,取值是個枚舉型的

<span style="color:#666600;">UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;//默認
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;//彈框
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar;//狀態欄</span>
上面的三個值的級別 UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
由此不難想到,其實狀態欄就是一個小的UIWindow,設置一下窗口級別及frame,就做到了一直在那裏顯示,一些APP的在狀態欄上面提示一些信息的實現手段其實就是自定義一個UIWindow,設置爲UIWindowLevelStatusBar級別,然後位置設置好即可,能蓋在原來的狀態欄窗口上面是因爲窗口有一個特性,就是後創建的會在最上面。另外,有些APP一個地方會有一個小的控件,不管你怎麼彈框,怎麼點擊,它始終就在最上面,做法其實就是一個小UIWindow,級別爲最高的UIWindowLevelAlert,這樣就不會被遮擋了。

UIWindow知識點三:KeyWindow

  什麼是keyWindow,官方文檔中是這樣解釋的"The key window is the one that is designated to receive keyboard and other non-touch related events. Only one window at a time may be the key window." 翻譯過來就是說,keyWindow是指定的用來接收鍵盤以及非觸摸類的消息,而且程序中每一個時刻只能有一個window是keyWindow。


以上是這兩天遇到的,總結一下,歡迎補充,如果有不對的地方也請多多指正。

    



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章