日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

PresentViewController详解

發(fā)布時(shí)間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PresentViewController详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、主要用途

  彈出模態(tài)ViewController是IOS變成中很有用的一個(gè)技術(shù),UIKit提供的一些專門(mén)用于模態(tài)顯示的ViewController,如UIImagePickerController等。彈出模態(tài)ViewController主要使用于一下這幾種情形:

  1、收集用戶輸入信息

  2、臨時(shí)呈現(xiàn)一些內(nèi)容

  3、臨時(shí)改變工作模式

  4、相應(yīng)設(shè)備方向變化(用于針對(duì)不同方向分別是想兩個(gè)ViewController的情況)

  5、顯示一個(gè)新的view層級(jí)

  這幾種情形都會(huì)暫時(shí)中斷程序正常的執(zhí)行流程,主要作用是收集或者顯示一些信息。

二、幾個(gè)概念和常用設(shè)置

1、presenting view controller Vs presented view controller

  當(dāng)我們?cè)趘iew controller A中模態(tài)顯示view controller B的時(shí)候,A就充當(dāng)presenting view controller(彈出VC),而B(niǎo)就是presented view controller(被彈出VC)。官方文檔建議這兩者之間通過(guò)delegate實(shí)現(xiàn)交互,如果使用過(guò)UIImagePickerController從系統(tǒng)相冊(cè)選取照片或者拍照,我們可以發(fā)現(xiàn)imagePickerController和彈出它的VC之間就是通過(guò)UIImagePickerControllerDelegate實(shí)現(xiàn)交互的。因此我們?cè)趯?shí)際應(yīng)用用,最好也遵守這個(gè)原則,在被彈出的VC中定義delegate,然后在彈出VC中實(shí)現(xiàn)該代理,這樣就可以比較方便的實(shí)現(xiàn)兩者之間的交互。

2、Modal Presentation Styles(彈出風(fēng)格)

  通過(guò)設(shè)置presented VC的modalPresentationStyle屬性,我們可以設(shè)置彈出View Controller時(shí)的風(fēng)格,有以下四種風(fēng)格,其定義如下:

typedef enum {UIModalPresentationFullScreen = 0,UIModalPresentationPageSheet,UIModalPresentationFormSheet,UIModalPresentationCurrentContext, } UIModalPresentationStyle;

  UIModalPresentationFullScreen代表彈出VC時(shí),presented VC充滿全屏,如果彈出VC的wantsFullScreenLayout設(shè)置為YES的,則會(huì)填充到狀態(tài)欄下邊,否則不會(huì)填充到狀態(tài)欄之下。

  UIModalPresentationPageSheet代表彈出是彈出VC時(shí),presented VC的高度和當(dāng)前屏幕高度相同,寬度和豎屏模式下屏幕寬度相同,剩余未覆蓋區(qū)域?qū)?huì)變暗并阻止用戶點(diǎn)擊,這種彈出模式下,豎屏?xí)r跟UIModalPresentationFullScreen的效果一樣,橫屏?xí)r候兩邊則會(huì)留下變暗的區(qū)域。

  UIModalPresentationFormSheet這種模式下,presented VC的高度和寬度均會(huì)小于屏幕尺寸,presented VC居中顯示,四周留下變暗區(qū)域。

  UIModalPresentationCurrentContext這種模式下,presented VC的彈出方式和presenting VC的父VC的方式相同。

  這四種方式在iPad上面統(tǒng)統(tǒng)有效,但在iPhone和iPod touch上面系統(tǒng)始終已UIModalPresentationFullScreen模式顯示presented VC。

3、Modal Transition Style(彈出時(shí)的動(dòng)畫(huà)風(fēng)格)

  通過(guò)設(shè)置設(shè)置presented VC的modalTransitionStyle屬性,我們可以設(shè)置彈出presented VC時(shí)場(chǎng)景切換動(dòng)畫(huà)的風(fēng)格,其定義如下:

typedef enum {UIModalTransitionStyleCoverVertical = 0,UIModalTransitionStyleFlipHorizontal,UIModalTransitionStyleCrossDissolve,UIModalTransitionStylePartialCurl, } UIModalTransitionStyle;

  我們可以看到有從底部滑入,水平翻轉(zhuǎn)進(jìn)入,交叉溶解以及翻頁(yè)這四種風(fēng)格可選。這四種風(fēng)格在不受設(shè)備的限制,即不管是iPhone還是iPad都會(huì)根據(jù)我們指定的風(fēng)格顯示轉(zhuǎn)場(chǎng)效果。

4、Dismiss Modal ViewController(消失彈出的VC)

  消失presented VC,我們可以通過(guò)調(diào)用以下兩個(gè)函數(shù)中的任何一個(gè)來(lái)完成

dismissModalViewControllerAnimated: // 將要廢棄,不贊成繼續(xù)使用 dismissViewControllerAnimated:completion:

  誰(shuí)來(lái)調(diào)用這消失presented VC的這個(gè)方法:正確的做法是“誰(shuí)污染誰(shuí)治理”,即presenting VC調(diào)用上面的方法來(lái)取消presented VC的顯示。這樣做有一個(gè)好處,如果一個(gè)VC真不用戶做的不同選擇可能彈出不同的view controller,當(dāng)不再需要顯示被彈出的view controller的時(shí)候,直接調(diào)用[self?dismissModalViewControllerAnimated]即可使之消失,而不用去關(guān)心其具體顯示的哪一類view controller。當(dāng)然系統(tǒng)在這里做了優(yōu)化,當(dāng)我們?cè)趐resented VC里面調(diào)用上面的方法的時(shí)候,系統(tǒng)會(huì)自動(dòng)的將這個(gè)消息傳遞到相應(yīng)的presenting VC中,這樣就可以實(shí)現(xiàn)不管誰(shuí)彈出了自己,當(dāng)不再需要的時(shí)候直接將自己消失掉的功能。在應(yīng)用中具體要采用那種要看具體情況,如果presented VC需要和presenting VC有數(shù)據(jù)傳遞的話,建議在presenting VC實(shí)現(xiàn)的代理函數(shù)中dismiss彈出的view controller。


總結(jié)

以上是生活随笔為你收集整理的PresentViewController详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。