UIPopoverPresentationController的使用

前言

最近項目中很多地方有一個相同的需求鞍历,那就是點擊一個按鈕的時候在按鈕的某一個方向彈出一個視圖位谋,這個視圖需要帶有一個箭頭指向,就像下圖一樣堰燎。要實現(xiàn)這個功能掏父,就要用到UIPopoverPresentationController這個類了。


WechatIMG38.jpeg

簡介

一個帶有箭頭的彈出視圖從出現(xiàn)到消失的整個過程秆剪,都是UIPopoverPresentationController類的實例在管理赊淑,UIPopoverPresentationController類的實例管理著彈出視圖的外形和其它的一些性質(zhì)。

我們不需要直接去創(chuàng)建這個類的對象仅讽,當(dāng)我們把這個彈出視圖對應(yīng)的視圖控制器的modalPresentationStyle屬性設(shè)置為UIModalPresentationPopover時陶缺,viewcontroller就會擁有一個popoverPresentationController屬性,它就是UIPopoverPresentationController類型的洁灵,用它來管理這個彈出視圖的外形和其它一些性質(zhì)饱岸。

UIPopoverPresentationControllerDelegate

UIPopoverPresentationControllerDelegate對象會通知它的delegate整個彈出視圖從彈出到消失的整個過程掺出。下面是其主要的API:
通知delegate視圖將要呈現(xiàn):

- (void)prepareForPopoverPresentation:(UIPopoverPresentationController *)popoverPresentationController;

詢問delegate視圖是否應(yīng)該消失

- (BOOL)popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController;

通知delegate視圖已經(jīng)消失

- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController;

相關(guān)屬性

3E798BC1-2CF1-4634-8859-9EA7515BE1E4.png
  • backgroundColor
    上圖中設(shè)置的backgroundColor是紅色,上圖中彈出視圖是由兩部分疊加的苫费,一部分是上面的viewcontroller的View汤锨,其背景色是黃色,還有一部分是承載viewcontroller的View的視圖百框,這個視圖是由viewcontroller的popoverPresentationController對象來管理的闲礼。
  • passthroughViews
    這是一個數(shù)組,里面裝著視圖铐维,一般情況下在彈出視圖可見的情況下柬泽,點擊界面上其他視圖是無效的,這會導(dǎo)致彈出視圖消失嫁蛇,但是這個數(shù)組中的視圖不會這樣锨并,在彈出視圖可見的情況下仍然可以點擊這些視圖。
  • canOverlapSourceViewRect
    這是一個布爾值睬棚,說明彈出視圖是否可以和sourceRect重疊第煮。
  • sourceView
    這個屬性其實就是要指出彈出視圖的箭頭要指向哪個視圖。
  • permittedArrowDirections
    這個屬性要確定彈出視圖的箭頭的方法闸拿,它是一個枚舉值空盼,上圖中設(shè)置的箭頭方向是左邊书幕。
  • sourceRect
    有了sourceView和permittedArrowDirections還不能完全確定箭頭的位置新荤,還需要一個參數(shù),這個參數(shù)就是sourceRect台汇。上圖中設(shè)置的sourceRect為_button.bnounds苛骨,當(dāng)我們把sourceRect設(shè)置為CGRectMake(0, 0, _button.bounds.size.width, _button.bounds.size.height / 2.0);也即是這個按鈕的上半?yún)^(qū)域的時候,我們看一下效果:
    0D46A23E-3BF1-4241-8A06-1BB92235F068.png

簡單應(yīng)用

    TestViewController *testVC = [[TestViewController alloc] init];
    testVC.preferredContentSize = CGSizeMake(150, 150);
    testVC.modalPresentationStyle = UIModalPresentationPopover;
    testVC.popoverPresentationController.delegate = self;
    testVC.popoverPresentationController.sourceView = _button;
    testVC.popoverPresentationController.sourceRect = CGRectMake(0, 0, _button.bounds.size.width / 2.0, _button.bounds.size.height / 2.0);
    testVC.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionLeft;
    testVC.popoverPresentationController.backgroundColor = [UIColor redColor];
    testVC.popoverPresentationController.canOverlapSourceViewRect = NO;
    [self presentViewController:testVC animated:YES completion:^{
        
    }];

注意苟呐,這樣做的話是無論如何都不能成功顯示彈出視圖的痒芝,我們還需要實現(xiàn)代理的一個方法:

#pragma mark - <UIPopoverPresentationControllerDelegate>
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
    return UIModalPresentationNone;
}

這樣就能成功實現(xiàn)了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末牵素,一起剝皮案震驚了整個濱河市严衬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笆呆,老刑警劉巖请琳,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赠幕,居然都是意外死亡俄精,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門榕堰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竖慧,“玉大人,你說我怎么就攤上這事』迹” “怎么了踱讨?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碳胳。 經(jīng)常有香客問我勇蝙,道長,這世上最難降的妖魔是什么挨约? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任味混,我火速辦了婚禮,結(jié)果婚禮上诫惭,老公的妹妹穿的比我還像新娘翁锡。我一直安慰自己,他們只是感情好夕土,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布馆衔。 她就那樣靜靜地躺著,像睡著了一般怨绣。 火紅的嫁衣襯著肌膚如雪角溃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天篮撑,我揣著相機與錄音减细,去河邊找鬼。 笑死赢笨,一個胖子當(dāng)著我的面吹牛未蝌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茧妒,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼萧吠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桐筏?” 一聲冷哼從身側(cè)響起纸型,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梅忌,沒想到半個月后狰腌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡铸鹰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年癌别,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹋笼。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡展姐,死狀恐怖躁垛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情圾笨,我是刑警寧澤教馆,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站擂达,受9級特大地震影響土铺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜板鬓,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一悲敷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俭令,春花似錦后德、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赫蛇,卻和暖如春绵患,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悟耘。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工落蝙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人作煌。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓掘殴,卻偏偏與公主長得像赚瘦,于是被迫代替她去往敵國和親粟誓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

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

  • 如何管理好自己的情緒 1.自我介紹:(用丟玩具方式起意,并重復(fù)對方的信息再來介紹自己的信息) 2.哪些情況中我們會有情...
    長風(fēng)VS破浪閱讀 178評論 0 0
  • 常用api 獲得當(dāng)前時間 提供年鹰服,月,日揽咕,時悲酷,分,秒等來創(chuàng)建一個時間亲善。傳入時區(qū) 獲取時間的年设易,月,日蛹头,時顿肺,分戏溺,秒 ...
    seven_son閱讀 618評論 0 0
  • 寫在前面的話旷祸,這篇文章可能有點哲理。 ………… 寫這篇文章的時候讼昆,想起了曾經(jīng)看到的一句話:愿你一生努力托享,一生被愛。...
    鹿柴柴閱讀 589評論 2 4
  • 今早5:00就起床了,其實早半個小時起床也沒有那么難既峡。起來聽了聽英文和日語辫诅,已經(jīng)很久沒起來學(xué)習(xí)了。以前5:30起來...
    阿林Karen閱讀 371評論 0 0