iOS 開發(fā)- UI篇-UIWindow介紹

UIWindow 簡單介紹原文鏈接??

iOS開發(fā)UI篇—UIWindow簡單介紹

<h6> 一、簡單介紹

  • UIWindow是一種特殊的UIView,通常在一個(gè)app中只會(huì)有一個(gè)UIWindow
  • iOS程序啟動(dòng)完畢后,創(chuàng)建的第一個(gè)視圖控件就是UIWindow,接著創(chuàng)建控制器的view,最后將控制器的view添加到UIWindow上,于是控制器的view就顯示在屏幕上了.
  • 一個(gè)iOS程序之所以能顯示到屏幕上,完全是因?yàn)?/code>它有UIWindow。也就說,沒有UIWindow,就看不見任何UI界面

補(bǔ)充:UIWindow是創(chuàng)建的第一個(gè)視圖控件(創(chuàng)建的第一個(gè)對象是UIapplication)


創(chuàng)建視圖.png

添加:

添加視圖到 UIWindow.png

先創(chuàng)建 UIWindow 再創(chuàng)建控制器,創(chuàng)建控制器的 view ,最后將控制器的 view 添加到UIWindow 上

二 UIWindow 的創(chuàng)建過程

1.簡單說明

創(chuàng)建一個(gè)空項(xiàng)目就能看到 UIWindow 怎么出來的了

注意:

程序啟動(dòng)后,先創(chuàng)建 application 再創(chuàng)建代理 ,之后創(chuàng)建 UIWindow(繼承至 UIView)


2.把 view 添加到 UIWindow 上面;

創(chuàng)建控制器,將 UIView 添加到 UIWindow (兩種方式)

  • 方法1: 創(chuàng)建一個(gè)控制器,直接將控制器的 view 添加到 UIWindow 上面(不理會(huì)它對應(yīng)的控制器)
[self.window addsubView:vc.view];
  • 方法2: 設(shè)置 UIWindow 的根控制器,rootViewController的 view 會(huì)自動(dòng)加入到 window 中. ( 沒有UIWindow,就看不見任何UI界面) 負(fù)責(zé)管理 UIWindow 的生命周期

兩個(gè)方法的區(qū)別:以后開發(fā)中,使用2,因?yàn)?存在一些問題,比如說控制器上可能有按鈕,需要監(jiān)聽按鈕的點(diǎn)擊事件,如果是1,那么按鈕的事件應(yīng)該由控制器來進(jìn)行管理.但是控制器是一個(gè)局部變量,此時(shí)控制器已經(jīng)不存在了,但是控制器的 view 還在,有可能會(huì)報(bào)錯(cuò).注意: 方法執(zhí)行完,這個(gè)控制器就已經(jīng)不存在了.


問題描述1:當(dāng)view發(fā)生一些事件的時(shí)候,通知控制器,但是控制器已經(jīng)銷毀了,所以可能出現(xiàn)未知的錯(cuò)誤。

問題描述2:添加一個(gè)開關(guān)按鈕,讓屏幕360度旋轉(zhuǎn)(兩者的效果不一樣)。當(dāng)發(fā)生屏幕旋轉(zhuǎn)事件的時(shí)候,UIapplication對象會(huì)將旋轉(zhuǎn)事件傳遞給uiwindow,uiwindow又會(huì)將旋轉(zhuǎn)事件傳遞給它的根控制器,由根控制器決定是否需要旋轉(zhuǎn)

UIapplication->uiwindow->根控制器(第一種方式?jīng)]有根控制器,所以不能跟著旋轉(zhuǎn))。

提示:不通過控制器的view也可以做開發(fā),但是在實(shí)際開發(fā)中,不要這么做,不要直接把view添加到UIWindow上面去。因?yàn)椋y以管理。

資料: 事件傳遞 ,響應(yīng)者鏈條


事件傳遞事例.png
響應(yīng)者鏈條.png

響應(yīng)者鏈的事件傳遞過程:

1>如果當(dāng)前view是控制器的view,那么控制器就是上一個(gè)響應(yīng)者(即是:下面該誰響應(yīng)這個(gè)事件),事件就傳遞給控制器;如果當(dāng)前view不是控制器的view,那么父視圖就是當(dāng)前view的上一個(gè)響應(yīng)者,事件就傳遞給它的父視圖
2>在視圖層次結(jié)構(gòu)的最頂級(jí)視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進(jìn)行處理
3>如果window對象也不處理,則其將事件或消息傳遞給UIApplication對象
4>如果UIApplication也不能處理該事件或消息,則將其丟棄

總結(jié):

事件的傳遞與響應(yīng):

  1. 當(dāng)一個(gè)事件發(fā)生后,事件會(huì)從父控件傳給子控件,也就是說由UIApplication -> UIWindow -> UIView -> initial view,以上就是事件的傳遞。
  2. 接下來是事件的響應(yīng)。首先看initial view能否處理這個(gè)事件,如果不能則會(huì)將事件傳遞給其上級(jí)視圖(inital view的superView);如果上級(jí)視圖仍然無法處理則會(huì)繼續(xù)往上傳遞;一直傳遞到視圖控制器view controller,首先判斷視圖控制器的根視圖view是否能處理此事件;如果不能則接著判斷該視圖控制器能否處理此事件,如果還是不能則繼續(xù)向上傳 遞;(對于第二個(gè)圖視圖控制器本身還在另一個(gè)視圖控制器中,則繼續(xù)交給父視圖控制器的根視圖,如果根視圖不能處理則交給父視圖控制器處理);一直到 window,如果window還是不能處理此事件則繼續(xù)交給application處理,如果最后application還是不能處理此事件則將其丟棄
  3. 在事件的響應(yīng)中,如果某個(gè)控件實(shí)現(xiàn)了touches...方法,則這個(gè)事件將由該控件來接受,如果調(diào)用了[supertouches….];就會(huì)將事件順著響應(yīng)者鏈條往上傳遞,傳遞給上一個(gè)響應(yīng)者;接著就會(huì)調(diào)用上一個(gè)響應(yīng)者的touches….方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS開發(fā)中經(jīng)常會(huì)涉及到觸摸事件。本想自己總結(jié)一下,但是遇到了這篇文章,感覺總結(jié)的已經(jīng)很到位,特此轉(zhuǎn)載。作者:L...
    WQ_UESTC閱讀 6,237評論 4 26
  • 好奇觸摸事件是如何從屏幕轉(zhuǎn)移到APP內(nèi)的?困惑于Cell怎么突然不能點(diǎn)擊了?糾結(jié)于如何實(shí)現(xiàn)這個(gè)奇葩響應(yīng)需求?亦或是...
    Lotheve閱讀 59,446評論 51 604
  • 7、不使用IB是,下面這樣做有什么問題? 6、請說說Layer和View的關(guān)系,以及你是如何使用它們的。 1.首先...
    AlanGe閱讀 988評論 0 1
  • 史上最詳細(xì)的iOS之事件的傳遞和響應(yīng)機(jī)制-原理篇http://www.itdecent.cn/p/2e074db7...
    Chris_C閱讀 1,477評論 0 8
  • 前言: 按照時(shí)間順序,事件的生命周期是這樣的:事件的產(chǎn)生和傳遞(事件如何從父控件傳遞到子控件并尋找到最合適的vie...
    VV木公子閱讀 141,287評論 194 1,202

友情鏈接更多精彩內(nèi)容