这是苹果官方在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;}新闻热点
疑难解答