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)。謝謝?。?!