iOS系统是自带侧滑返回的,但一定要是边缘返回,不是全屏,可能是手势冲突的的原因,苹果肯定是有自己的考虑。但是开发者们,思路开阔,开发了全屏滑动返回的效果,和大家分享一种最简单有效的方案。
首先,自定义一个NavigationController继承UINavigationController,然后添加自定义的手势调用系统自带的滑动手势的action方法,实现代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//右滑返回
//获取系统自带滑动手势的target对象
id target = self.interactivePopGestureRecognizer.delegate;
//创建全屏滑动手势,调用系统自带滑动手势的target的action方法
SEL handler = NSSelectorFromString(@"handleNavigationTransition:");
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:handler];
pan.delegate = self;
//添加全屏滑动手势
[self.interactivePopGestureRecognizer.view addGestureRecognizer:pan];
self.interactivePopGestureRecognizer.delegate = self;
}
然后在手势代理中要排除掉左滑,根控制器,返回中等情况,从而实现全屏右滑返回:
#pragma - Gesture delegate
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
//控制器栈里只有一个,不响应
if (self.viewControllers.count <= 1) {
return NO;
}
//当控制器正在返回的时候,不响应
if ([[self valueForKey:@"_isTransitioning"] boolValue]) {
return NO;
}
//只能响应从左到右的滑动
CGPoint translation = [gestureRecognizer translationInView:gestureRecognizer.view];
if (translation.x <= 0) {
return NO;
}
return YES;
}