UIWindow

一、UIWindow是一種特殊的UIView咸灿,通常在一個(gè)app中只會(huì)有一個(gè)UIWindow构订。

iOS程序啟動(dòng)完畢后,創(chuàng)建的第一個(gè)視圖控件就是UIWindow避矢,接著創(chuàng)建控制器的view悼瘾,最后將控制器的view添加到UIWindow上,于是控制器的view就顯示在屏幕上了审胸。

一個(gè)iOS程序之所以能顯示到屏幕上亥宿,完全是因?yàn)樗蠻IWindow。也就說(shuō)砂沛,沒(méi)有UIWindow箩绍,就看不見(jiàn)任何UI界面。


二尺上、通常我們可以采取兩種方法將view添加到UIWindow中:

1、addSubview

直接將view通過(guò)addSubview方式添加到window中圆到,程序負(fù)責(zé)維護(hù)view的生命周期以及刷新怎抛,但是并不會(huì)為去理會(huì)view對(duì)應(yīng)的ViewController,因此采用這種方法將view添加到window以后芽淡,我們還要保持view對(duì)應(yīng)的ViewController的有效性马绝,不能過(guò)早釋放。

2挣菲、rootViewController

rootViewController時(shí)UIWindow的一個(gè)遍歷方法富稻,通過(guò)設(shè)置該屬性為要添加view對(duì)應(yīng)的ViewController,UIWindow將會(huì)自動(dòng)將其view添加到當(dāng)前window中白胀,同時(shí)負(fù)責(zé)ViewController和view的生命周期的維護(hù)椭赋,防止其過(guò)早釋放

三、 Window的作用或杠。

在iOS中哪怔,一個(gè)window(也就是一個(gè)UIWindow對(duì)象)主要有這樣幾個(gè)作用:

1、展示app的可視內(nèi)容;

2认境、將事件分發(fā)給視圖以及其他對(duì)象胚委;

3、和app的view controller一起處理屏幕旋轉(zhuǎn)叉信。

其實(shí)在大多數(shù)情況下亩冬,第三方程序員不用做任何事情,UIWindow就能完成這些工作硼身。所以很多時(shí)候硅急,只有當(dāng)這個(gè)app需要支持另一個(gè)外設(shè)的屏幕的時(shí)候,程序員才會(huì)對(duì)UIWindow進(jìn)行操作鸠姨。

四铜秆、 創(chuàng)建和配置一個(gè)Window。

- (void)configureExternalDisplayAndShowWithContent:(UIViewController*)rootVC

{

? ? ? ? self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

? ? ? ? self.window.windowLevel = UIWindowLevelNormal;

? ? ? ? self.window.screen = [UIScreen mainScreen];

? ? ? ? self.window.backgroundColor = [UIColor whiteColor];

? ? ? ? self.window.rootViewController = rootVC;

? ? ? ? // 我這里設(shè)置的 windowLevel 級(jí)別為 UIWindowLevelNormal讶迁,在與程序主窗口級(jí)別相等情況下连茧,我想顯示額外的窗口,只需要把它的隱藏屬性改為 No巍糯,并不需要讓它成為主窗口啸驯。

? ? ? ? self.window.hidden = NO;

? ? ? ? //[self.window makeKeyAndVisible]; 顯示窗口,并成為關(guān)鍵窗口祟峦。

}

也可以通過(guò) [UIApplication sharedApplication].keyWindow罚斗;獲取應(yīng)用程序的主window。

UIWindow *window = [UIApplication sharedApplication].keyWindow;

[window addSubview:view];

五宅楞、 隱藏一個(gè)Window针姿。

- (void)hideTheWindow

{

? ? ? ? self.window.hidden = YES;

? ? ? ? self.window = nil;

}

六、 常用屬性厌衙。

1距淫、@property(nonatomic, strong) UIViewController *rootViewController // 設(shè)置window的根視圖控制器

2、@property(nonatomic) UIWindowLevel windowLevel

// UIWindow在顯示的時(shí)候會(huì)根據(jù)UIWindowLevel進(jìn)行排序的婶希,即Level高的將排在所有Level比他低的層級(jí)的前面榕暇。

// 例如系統(tǒng)的 UIAlertView,它也是將試圖加載到window上面喻杈,它的Level為 UIWindowLevelAlert彤枢,所以它總是顯示在試圖層次最上層。

// 下面我們來(lái)看UIWindowLevel的定義:

const UIWindowLevel UIWindowLevelNormal; // level:?0.000000

const UIWindowLevel UIWindowLevelAlert; // level:?2000.000000

const UIWindowLevel UIWindowLevelStatusBar; // level:?1000.000000

typedef CGFloat UIWindowLevel;

// 這個(gè)屬性默認(rèn)值為 UIWindowLevelNormal筒饰;

3缴啡、 @property(nonatomic, readonly, getter=isKeyWindow) BOOL keyWindow

// 一個(gè)布爾值,該值指示是否窗口是應(yīng)用程序的關(guān)鍵窗口龄砰。一個(gè)應(yīng)用程序只能有一個(gè)keyWindow盟猖。

七讨衣、 常用方法。

1式镐、 - (void)makeKeyAndVisible反镇。 // 顯示窗口,并使其成為關(guān)鍵窗口娘汞。

2歹茶、 - (void)makeKeyWindow。 // 設(shè)置窗口為關(guān)鍵窗口你弦。

八惊豺、 坐標(biāo)轉(zhuǎn)換。

1禽作、 - (CGPoint)convertPoint:(CGPoint)point toWindow:(UIWindow *)window尸昧。

// 將當(dāng)前window的坐標(biāo)系統(tǒng)轉(zhuǎn)換為另一個(gè)window的坐標(biāo)系統(tǒng)的點(diǎn)。

2旷偿、 - (CGPoint)convertPoint:(CGPoint)point fromWindow:(UIWindow *)window烹俗。

// 將一個(gè)點(diǎn)從一個(gè)給定window的坐標(biāo)系統(tǒng)轉(zhuǎn)換為當(dāng)前window的坐標(biāo)系統(tǒng)。

3萍程、 - (CGRect)convertRect:(CGRect)rect toWindow:(UIWindow *)window幢妄。

// 將矩形從當(dāng)前window的坐標(biāo)轉(zhuǎn)換為另一個(gè)window的坐標(biāo)系統(tǒng)。

4茫负、 - (CGRect)convertRect:(CGRect)rect fromWindow:(UIWindow *)window蕉鸳。

// 將矩形從另一個(gè)window的坐標(biāo)系轉(zhuǎn)換為當(dāng)前window的坐標(biāo)系。

八忍法、 軟鍵盤(pán)相關(guān)通知潮尝。

1、 NSString *const UIKeyboardWillShowNotification;

// 在軟鍵盤(pán)顯示前發(fā)送通知饿序。

2衍锚、 NSString *const UIKeyboardDidShowNotification;

// 在軟鍵盤(pán)顯示后發(fā)送通知嗤堰。

3、 NSString *const UIKeyboardWillHideNotification度宦;

// 在軟鍵盤(pán)消失前發(fā)送通知踢匣。

4、 NSString *const UIKeyboardDidHideNotification戈抄;

// 在軟鍵盤(pán)消失后發(fā)送通知离唬。

九、 UIWindow相關(guān)通知划鸽。

1输莺、 NSString *const UIWindowDidBecomeVisibleNotification;

// 當(dāng)window顯示的時(shí)候發(fā)送通知戚哎。

2、 NSString *const UIWindowDidBecomeHiddenNotification;

// 當(dāng)window隱藏后發(fā)送通知嫂用。

3型凳、 NSString *const UIWindowDidBecomeKeyNotification;

// 當(dāng)window成為關(guān)鍵window的時(shí)候發(fā)送通知。

4嘱函、 NSString *const UIWindowDidResignKeyNotification;

// 當(dāng)window不是關(guān)鍵window的時(shí)候發(fā)送通知甘畅。

當(dāng)你使用一個(gè)額外的window,并使其成為關(guān)鍵window的時(shí)候往弓,它的流程如下:

1疏唾、? 顯示額外的window。

2函似、 把應(yīng)用原有的window設(shè)置為不是關(guān)鍵window(因?yàn)橐粋€(gè)應(yīng)用程序只能有一個(gè)關(guān)鍵window)槐脏。

3、 把額外的window設(shè)置為關(guān)鍵window撇寞。

當(dāng)你移除一個(gè)額外的關(guān)鍵window的時(shí)候顿天,它的流程如下:

1、 把額外的關(guān)鍵window設(shè)置為不是關(guān)鍵window(因?yàn)橐粋€(gè)應(yīng)用程序只能有一個(gè)關(guān)鍵window)重抖。

2露氮、 把應(yīng)用原有的window設(shè)置為關(guān)鍵window。

3钟沛、 隱藏額外的window畔规。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恨统,隨后出現(xiàn)的幾起案子叁扫,更是在濱河造成了極大的恐慌,老刑警劉巖畜埋,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莫绣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡悠鞍,警方通過(guò)查閱死者的電腦和手機(jī)对室,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咖祭,“玉大人掩宜,你說(shuō)我怎么就攤上這事∶春玻” “怎么了牺汤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)浩嫌。 經(jīng)常有香客問(wèn)我檐迟,道長(zhǎng)补胚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任追迟,我火速辦了婚禮溶其,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怔匣。我一直安慰自己握联,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布每瞒。 她就那樣靜靜地躺著金闽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剿骨。 梳的紋絲不亂的頭發(fā)上代芜,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音浓利,去河邊找鬼挤庇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贷掖,可吹牛的內(nèi)容都是我干的嫡秕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼苹威,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼昆咽!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起牙甫,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掷酗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窟哺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體泻轰,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年且轨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浮声。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旋奢,死狀恐怖阿蝶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黄绩,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布玷过,位于F島的核電站爽丹,受9級(jí)特大地震影響筑煮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粤蝎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一真仲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧初澎,春花似錦秸应、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至延柠,卻和暖如春祸挪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贞间。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工贿条, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人增热。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓整以,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親峻仇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子公黑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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