這是蘋果官方在WWDC上提倡的方法,靈活性高。可以高度自定義push和pop轉(zhuǎn)場動畫。這種方法需要我們徹底實(shí)現(xiàn)側(cè)滑返回,那我們的思路就是:
先給view添加一個UipanGestureRecognizer手勢;再自定義該手勢的觸發(fā)方法,該方法里實(shí)現(xiàn)了側(cè)滑。
pop.gifiOS7之后是有側(cè)滑返回手勢功能的。注意,也就是說系統(tǒng)已經(jīng)定義了一種手勢,并且給這個手勢已經(jīng)添加了一個觸發(fā)方法(重點(diǎn))。但是,系統(tǒng)的這個手勢的觸發(fā)條件是必須從屏幕左邊緣開始滑動。我們?nèi)∏傻姆椒ㄊ亲约簩懸粋€支持全屏滑動的手勢,而其觸發(fā)方法系統(tǒng)已經(jīng)有,沒必要自己實(shí)現(xiàn)pop的動畫,所以直接就把系統(tǒng)的觸發(fā)處理方法作為我們自己定義的手勢的處理方法。
#import "ViewController.h"@interface ViewController ()<UIGestureRecognizerDelegate>@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{ // 當(dāng)當(dāng)前控制器是根控制器時,不可以側(cè)滑返回,所以不能使其觸發(fā)手勢 if(self.navigationController.childViewControllers.count == 1) { return NO; } return YES;}新聞熱點(diǎn)
疑難解答