轉載 UIModalPresentationStyle

原文

presenting view controller & presented view controller
當VCA模態(tài)的彈出了VCB绿满,那么VCA就是presenting view controller评凝,VCB就是presented view controller蟀苛,具體在代碼中體現(xiàn)如下:

[VCA presentViewController:VCB animated:YES completion:nil];

container view controller

container view controller 指的是VC的容器類,通過container view controller侈玄,我們可以很方便的管理子VC婉刀,實現(xiàn)VC之間的跳轉等,iOS中container view controller包括g UINavigationController, UITabbarViewController,UISplitViewController, 以及 UIPageViewController.

presented VC 的modalPresentationStyle屬性決定了此次presentation的行為方式及UIKit尋找presentation context的方法拗馒,iOS提供了以下幾種常用的presentation style

  • UIModalPresentationFullScreen

UIKit默認的presentation style路星。 使用這種模式時溯街,presented VC的寬高與屏幕相同诱桂,并且UIKit會直接使用rootViewController做為presentation context洋丐,在此次presentation完成之后,UIKit會將presentation context及其子VC都移出UI棧挥等,這時候觀察VC的層級關系友绝,會發(fā)現(xiàn)UIWindow下只有presented VC.

  • UIModalPresentationPageSheet

在常規(guī)型設備(大屏手機,例如plus系列以及iPad系列)的水平方向肝劲,presented VC的高為當前屏幕的高度迁客,寬為該設備豎直方向屏幕的寬度,其余部分用透明背景做填充辞槐。對于緊湊型設備(小屏手機)的水平方向及所有設備的豎直方向掷漱,其顯示效果與UIModalPresentationFullScreen相同。

  • UIModalPresentationFormSheet

在常規(guī)型設備的水平方向榄檬,presented VC的寬高均小于屏幕尺寸卜范,其余部分用透明背景填充。對于緊湊型設備的水平方向及所有設備的豎直方向鹿榜,其顯示效果與UIModalPresentationFullScreen相同

  • UIModalPresentationCurrentContext

使用這種方式present VC時海雪,presented VC的寬高取決于presentation context的寬高,并且UIKit會尋找屬性definesPresentationContext為YES的VC作為presentation context舱殿,具體的尋找方式會在下文中給出 奥裸。當此次presentation完成之后,presentation context及其子VC都將被暫時移出當前的UI棧沪袭。

  • UIModalPresentationCustom

自定義模式湾宙,需要實現(xiàn)UIViewControllerTransitioningDelegate的相關方法,并將presented VC的transitioningDelegate 設置為實現(xiàn)了UIViewControllerTransitioningDelegate協(xié)議的對象冈绊。

  • UIModalPresentationOverFullScreen

與UIModalPresentationFullScreen的唯一區(qū)別在于创倔,UIWindow下除了presented VC,還有其他正常的VC層級關系焚碌。也就是說該模式下畦攘,UIKit以rootViewController為presentation context,但presentation完成之后不會講rootViewController移出當前的UI棧十电。

  • UIModalPresentationOverCurrentContext

尋找presentation context的方式與UIModalPresentationCurrentContext相同知押,所不同的是presentation完成之后,不會將context及其子VC移出當前UI棧鹃骂。但是台盯,這種方式只適用于transition style為UIModalTransitionStyleCoverVertical的情況(UIKit默認就是這種transition style)。其他transition style下使用這種方式將會觸發(fā)異常畏线。

  • UIModalPresentationBlurOverFullScreen

presentation完成之后静盅,如果presented VC的背景有透明部分,會看到presented VC下面的VC會變得模糊寝殴,其他與UIModalPresentationOverFullScreen模式沒有區(qū)別蒿叠。

present VC是通過UIViewController的presentViewController: animated:completion:
函數(shù)實現(xiàn)的明垢,在探討他們之間的層級關系之前,我們首先要理解一個概念市咽,就是presentation context痊银。

presentation context

presentation context是指為本次present提供上下文環(huán)境的類,需要指出的是施绎,presenting VC通常并不是presentation context溯革,Apple官方文檔對于presentation context的選擇是這樣介紹的:

從上面的介紹可以看出,當我們需要present VC的時候谷醉,除非我們指定了context致稀,否則UIKit會優(yōu)先選擇presenting VC所屬的容器類做為presentation context,如果沒有容器類俱尼,那么會選擇rootViewController豺裆。但是,UIKit搜索context的方式還與presented VC的modalPresentationStyle屬性有關号显,當modalPresentationStyle為UIModalPresentationFullScreen臭猜、UIModalPresentationOverFullScreen等模式時,UIKit會直接選擇rootViewController做為context押蚤。當modalPresentationStyle為UIModalPresentationOverCurrentContext蔑歌、UIModalPresentationCurrentContext模式時,UIKit搜索context的方式如下:

When you present a view controller, UIKit looks for a view controller that provides a suitable context for the presentation. In many cases, UIKit chooses the nearest container view controller but it might also choose the window’s root view controller. In some cases, you can also tell UIKit which view controller defines the presentation context and should handle the presentation.

UIModalPresentationOverCurrentContext揽碘、UIModalPresentationCurrentContext模式下次屠,一個VC能否成為presentation context 是由VC的definesPresentationContext屬性決定的,這是一個BOOL值雳刺,默認UIViewController的definesPresentationContext屬性值是NO劫灶,而 container view controller的definesPresentationContext默認值是YES,這也是上文中掖桦,UIKit總是將container view controller做為presentation context的原因本昏。如果我們想指定presenting VC做為context,只需要在presenting VC的viewDidLoad方法里添加如下代碼即可

UIKit搜索presentation context的順序為:

  1. presenting VC
  2. presenting VC 的父VC
  3. presenting VC 所屬的container VC
  4. rootViewController

還有另外一種特殊情況枪汪,當我們在一個presented VC上再present一個VC時涌穆,UIKit會直接將這個presented VC做為presentation context。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末雀久,一起剝皮案震驚了整個濱河市宿稀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赖捌,老刑警劉巖祝沸,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡罩锐,警方通過查閱死者的電腦和手機奉狈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唯欣,“玉大人,你說我怎么就攤上這事搬味【城猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵碰纬,是天一觀的道長萍聊。 經常有香客問我,道長悦析,這世上最難降的妖魔是什么寿桨? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮强戴,結果婚禮上亭螟,老公的妹妹穿的比我還像新娘。我一直安慰自己骑歹,他們只是感情好预烙,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著道媚,像睡著了一般扁掸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上最域,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天谴分,我揣著相機與錄音,去河邊找鬼镀脂。 笑死牺蹄,一個胖子當著我的面吹牛,可吹牛的內容都是我干的薄翅。 我是一名探鬼主播钞馁,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匿刮!你這毒婦竟也來了僧凰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤熟丸,失蹤者是張志新(化名)和其女友劉穎训措,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡绩鸣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年怀大,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呀闻。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡化借,死狀恐怖,靈堂內的尸體忽然破棺而出捡多,到底是詐尸還是另有隱情蓖康,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布垒手,位于F島的核電站蒜焊,受9級特大地震影響,放射性物質發(fā)生泄漏科贬。R本人自食惡果不足惜泳梆,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望榜掌。 院中可真熱鬧优妙,春花似錦、人聲如沸憎账。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鼠哥。三九已至熟菲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朴恳,已是汗流浹背抄罕。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留于颖,地道東北人呆贿。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像森渐,于是被迫代替她去往敵國和親做入。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容

  • 飛機飛得很高 我不用背著降落傘 只要想去哪里 翻著跟頭跳下來 就可以平穩(wěn)到達 而不管降落在哪兒 都刮著大風 我的頭...
    vvsun閱讀 177評論 0 0
  • ?在追求、吸引心儀女孩的道路上耐齐,有一個高價值又便捷的辦法很容易被忽視——打造高逼格的朋友圈浪秘。 也許你會說自己文筆不...
    HI_王圖思睿閱讀 54,170評論 1 15
  • 阿里負責人揭秘面試潛規(guī)則: 最近負責了公司招聘蒋情,發(fā)現(xiàn)校園招聘這種事情,真是一個奇葩的工作耸携。能做好校園招聘的人棵癣,一定...
    Deecyn閱讀 159評論 0 0