iOS開(kāi)發(fā)-模態(tài)視圖跳轉(zhuǎn)

iOS開(kāi)發(fā)中界面的跳轉(zhuǎn)一般都會(huì)使用導(dǎo)航欄UINavigationController來(lái)進(jìn)行push跳轉(zhuǎn),使用導(dǎo)航欄跳轉(zhuǎn)用起來(lái)簡(jiǎn)單,并且自帶返回按鈕,非常方便。但也會(huì)用到模態(tài)視圖的跳轉(zhuǎn),我對(duì)模態(tài)視圖使用的心得就是在跳轉(zhuǎn)到不需要真?zhèn)€界面展示視圖的時(shí)候使用模態(tài)視圖跳轉(zhuǎn)看起來(lái)的視覺(jué)效果會(huì)好一些,并且可以對(duì)跳轉(zhuǎn)動(dòng)畫(huà)進(jìn)行簡(jiǎn)單的自定制,使用戶體驗(yàn)更加的流暢完美。
相信大部分的iOS開(kāi)發(fā)者都知道模態(tài)視圖如何使用,但是還有一些初學(xué)者并不知道如何使用,其實(shí)非常簡(jiǎn)單,核心代碼如下:

    ModalViewController * modal = [[ModalViewController alloc] init];

    //把當(dāng)前控制器作為背景
    self.definesPresentationContext = YES;

    //設(shè)置模態(tài)視圖彈出樣式
    modal.modalPresentationStyle = UIModalPresentationOverFullScreen;

    [self presentViewController:modal animated:YES completion:nil];

上面的幾行代碼已經(jīng)可以實(shí)現(xiàn)模態(tài)視圖的跳轉(zhuǎn)了。但是如果僅僅是這么跳轉(zhuǎn),效果看起來(lái)并不是很好看,下面我們可以在當(dāng)前視圖控制器window的layer添加一個(gè)簡(jiǎn)單的自定制的動(dòng)畫(huà),會(huì)讓跳轉(zhuǎn)效果看起來(lái)更加流暢。

    //創(chuàng)建動(dòng)畫(huà)
    CATransition * transition = [CATransition animation];

    //設(shè)置動(dòng)畫(huà)類型(這個(gè)是字符串,可以搜索一些更好看的類型)
    transition.type = @"moveOut";
    
    //動(dòng)畫(huà)出現(xiàn)類型
    transition.subtype = @"fromCenter";
    
    //動(dòng)畫(huà)時(shí)間
    transition.duration = 0.3;
    
    //移除當(dāng)前window的layer層的動(dòng)畫(huà)
    [self.view.window.layer removeAllAnimations];
    
    //將定制好的動(dòng)畫(huà)添加到當(dāng)前控制器window的layer層
    [self.view.window.layer addAnimation:transition forKey:nil];

把上邊代碼寫在模態(tài)視圖跳轉(zhuǎn)之前(為了養(yǎng)成良好的代碼管理習(xí)慣,建議將該段代碼封裝到一個(gè)方法中,使用的時(shí)候調(diào)用該方法即可),present的時(shí)候需要關(guān)閉系統(tǒng)動(dòng)畫(huà)即:

    [self presentViewController:modal animated:NO completion:nil];

到了這里,我們就可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單又好看的模態(tài)視圖跳轉(zhuǎn),非常簡(jiǎn)單吧!當(dāng)然跳轉(zhuǎn)到的界面需要使用dismiss來(lái)返回。
下面來(lái)給大家簡(jiǎn)單再簡(jiǎn)單說(shuō)一下模態(tài)視圖彈出樣式:

    //跳轉(zhuǎn)之后覆蓋整個(gè)屏幕,不透明
    UIModalPresentationFullScreen = 0,
    //跳轉(zhuǎn)之后覆蓋整個(gè)屏幕,不透明
    UIModalPresentationPageSheet
    //跳轉(zhuǎn)之后覆蓋整個(gè)屏幕,不透明
    UIModalPresentationFormSheet 
    //跳轉(zhuǎn)之后覆蓋當(dāng)前內(nèi)容(除導(dǎo)航欄和標(biāo)簽欄部分),不透明
    UIModalPresentationCurrentContext
    //跳轉(zhuǎn)之后顯示自定制視圖(默認(rèn)是覆蓋整個(gè)屏幕),可以透明
    UIModalPresentationCustom 
    //跳轉(zhuǎn)之后覆蓋整個(gè)屏幕,可以透明
    UIModalPresentationOverFullScreen 
    //跳轉(zhuǎn)之后覆蓋當(dāng)前內(nèi)容(除導(dǎo)航欄和標(biāo)簽欄部分),可以透明
    UIModalPresentationOverCurrentContext 
    //跳轉(zhuǎn)之后覆蓋整個(gè)屏幕,不透明
    UIModalPresentationPopover 

我對(duì)模態(tài)視圖跳轉(zhuǎn)的看法是為了用戶體驗(yàn)更加完美而增加的,由此通常用到的跳轉(zhuǎn)彈出樣式一般會(huì)選擇可以透明的,看起來(lái)更加漂亮。可以根據(jù)需求而選擇是覆蓋整個(gè)屏幕,還是只覆蓋當(dāng)前內(nèi)容(未覆蓋部分是可以交互的)。
最后還是希望能夠幫助到有需要的程序猿們,同時(shí)希望大家能夠多多提意見(jiàn),愿同是程序猿的我們?cè)陂_(kāi)發(fā)的道路上共同成長(zhǎng)。謝謝?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,466評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,251評(píng)論 4 61
  • 班里少來(lái)幾個(gè)人,不點(diǎn)名,沒(méi)人知道誰(shuí)逃課了。你不露出悲催的表情,沒(méi)人知道你在難過(guò)。生活想必就是如此,我不是你的全部,...
    漂泊者閱讀 360評(píng)論 0 1
  • 我相信 如果經(jīng)過(guò)努力 還沒(méi)有得到自己想要的 那一定是老天爺 覺(jué)得你值得擁有更好的 但一定是建立在 你付出百分百的努力之上
    海倫妹閱讀 263評(píng)論 0 0
  • 欲望是無(wú)盡的,人生是有限的,在生活這部劇里面,沒(méi)有誰(shuí)是主角,不如就帶著那份未知的渴求,在有限的劇本里,純粹的活成自...
    盛夏夏夏夏夏閱讀 923評(píng)論 0 4