三種方法:方法1:系統(tǒng)自帶的側(cè)滑返回方法
2【8行代碼教你搞定導(dǎo)航控制器全屏滑動返回效果】 |那些人追的干貨
3:百度知道團隊出品的全屏側(cè)滑返回(github地址)
方案一 :開啟使用系統(tǒng)自帶的側(cè)滑返回
iOS7之后系統(tǒng)提供了側(cè)滑手勢(interactivePopGestureRecognizer)实愚,即從屏幕左側(cè)邊緣滑起會pop回導(dǎo)航控制器棧的上個viewController嗦嗡。不過如果你自定義了UINavigationViewController或者自定義了返回按鈕呛牲,系統(tǒng)自帶的側(cè)滑返回功能會失效鞍恢。此時需要添加下面的代碼解決:self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
缺點:
?必須從屏幕邊緣左側(cè)滑起才會觸發(fā)希太;
?一旦自定義導(dǎo)航控制器或者自定義返回按鈕特姐,就會失效晶丘。
?優(yōu)點:實現(xiàn)簡單,導(dǎo)航控制器中對全體viewController的側(cè)滑功能可控唐含,系統(tǒng)API絕對安全可靠浅浮,無手勢沖突
?缺點:側(cè)滑范圍局限于左側(cè)
?適用需求:只需左側(cè)小范圍觸發(fā)側(cè)滑時的首選實現(xiàn)方案。
?注:以上代碼是強制開啟捷枯,而系統(tǒng)的側(cè)滑是默認開啟的滚秩,如果在某一界面 hidesBackButton,那么系統(tǒng)是禁止當前界面的側(cè)滑返回淮捆。
?如果實現(xiàn)了以上代碼郁油,屬于強制開啟,那么就算當前界面hidesBackButton攀痊,側(cè)滑功能一樣開啟桐腌,通過上面的代理方法可以做到靈活控制哪個界面是否開啟側(cè)滑。方案二極其簡單取巧的方法iOS7之后是有側(cè)滑返回手勢功能的苟径。注意案站,也就是說系統(tǒng)已經(jīng)定義了一種手勢,并且給這個手勢已經(jīng)添加了一個觸發(fā)方法(重點)棘街。但是蟆盐,系統(tǒng)的這個手勢的觸發(fā)條件是必須從屏幕左邊緣開始滑動。我們?nèi)∏傻姆椒ㄊ亲约簩懸粋€支持全屏滑動的手勢遭殉,而其觸發(fā)方法系統(tǒng)已經(jīng)有石挂,沒必要自己實現(xiàn)pop的動畫,所以直接就把系統(tǒng)的觸發(fā)處理方法作為我們自己定義的手勢的處理方法险污。#import "ViewController.h"@interface ViewController ()@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
id target = self.navigationController.interactivePopGestureRecognizer.delegate;
// handleNavigationTransition:為系統(tǒng)私有API,即系統(tǒng)自帶側(cè)滑手勢的回調(diào)方法痹愚,我們在自己的手勢上直接用它的回調(diào)方法
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
panGesture.delegate = self; // 設(shè)置手勢代理,攔截手勢觸發(fā)
[self.view addGestureRecognizer:panGesture];
// 一定要禁止系統(tǒng)自帶的滑動手勢
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
// 什么時候調(diào)用蛔糯,每次觸發(fā)手勢之前都會詢問下代理方法拯腮,是否觸發(fā)
// 作用:攔截手勢觸發(fā)
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 當當前控制器是根控制器時,不可以側(cè)滑返回渤闷,所以不能使其觸發(fā)手勢
if(self.navigationController.childViewControllers.count == 1)
{
return NO;
}
return YES;
}
@end
優(yōu)點:最簡潔的全屏側(cè)滑實現(xiàn),導(dǎo)航控制器中對全體viewController的側(cè)滑功能可控
缺點:從右邊忘左邊劃動也能觸發(fā)側(cè)滑操作脖镀,有手勢沖突飒箭,并不完美狼电。且調(diào)用官方私有API
另外:正是缺點的所在,和Cell的側(cè)滑刪除手勢也是有沖突的弦蹂,也就是說肩碟,免不了需要解決手勢的沖突。
適用需求:最好不用凸椿,畢竟缺點明顯削祈。(不過這個實現(xiàn)思路,確實值得稱贊D月)
方法三實現(xiàn)(集成最簡單髓抑、功能最全面):
去上面的鏈接地址下載DEMO,具體詳情見github
轉(zhuǎn)載优幸、