這是蘋果官方在WWDC上提倡的方法,靈活性高。可以高度自定義push和pop轉場動畫。這種方法需要我們徹底實現側滑返回,那我們的思路就是:
先給view添加一個UipanGestureRecognizer手勢;再自定義該手勢的觸發方法,該方法里實現了側滑。iOS7之后是有側滑返回手勢功能的。注意,也就是說系統已經定義了一種手勢,并且給這個手勢已經添加了一個觸發方法(重點)。但是,系統的這個手勢的觸發條件是必須從屏幕左邊緣開始滑動。我們取巧的方法是自己寫一個支持全屏滑動的手勢,而其觸發方法系統已經有,沒必要自己實現pop的動畫,所以直接就把系統的觸發處理方法作為我們自己定義的手勢的處理方法。
#import "ViewController.h"@interface ViewController ()<UIGestureRecognizerDelegate>@end@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad]; id target = self.navigationController.interactivePopGestureRecognizer.delegate; // handleNavigationTransition:為系統私有API,即系統自帶側滑手勢的回調方法,我們在自己的手勢上直接用它的回調方法 UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)]; panGesture.delegate = self; // 設置手勢代理,攔截手勢觸發 [self.view addGestureRecognizer:panGesture]; // 一定要禁止系統自帶的滑動手勢 self.navigationController.interactivePopGestureRecognizer.enabled = NO;}// 什么時候調用,每次觸發手勢之前都會詢問下代理方法,是否觸發// 作用:攔截手勢觸發- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ // 當當前控制器是根控制器時,不可以側滑返回,所以不能使其觸發手勢 if(self.navigationController.childViewControllers.count == 1) { return NO; } return YES;}新聞熱點
疑難解答