中间滑动返回
- 我们如果想要滑动中间就可以返回上一页,我们需要自己重新设置
- 但是我们还是想要左滑返回的样子,所以我们需要用系统给我们设定好的方法来放到我们自己的手势中
//得到系统手势
UIScreenEdgePanGestureRecognizer *gest = self.interactivePopGestureRecognizer;
//得到系统手势中管理左滑返回的属性
NSArray *targets = [gest valueForKeyPath:@"_targets"];
* 他这个取出来是一个数组,数组里面的属性才是真正管理的
id target = [targets[0] valuesForKeyPath:@"_target"];
//添加自己的手势(滑动)
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@Selector(handleNavigationTransition:)];
[self.view addGestureRecognizer:pan];
- handleNavigationTransition:系统返回的方法
- target系统控制返回的属性(使用KVC方法获取私有属性)
简单实现
//清空系统代理
self.interactivePopGestureRecognizer.enabled = NO;
//设置系统监听
id target = self.interactivePopGestureRecognizer.delegate;
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@Selector(handleNavigationTransition:)];
[self.view addGestureRecognizer:pan];
- 我们直接让系统代理监听自己
- 在做这个之前,我们需要将系统的代理清空
- **但是这个有BUG,在他是根控制器的时候滑动还会出现问题,所以我们需要在滑动开始的时候进行判断,如果他不是根控制器可以滑动,是根控制器返回NO
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
BOOL open = self.viewControllers.count > 1;
return open;
}
- 在我们创建自控制器的时候,原理是堆的存储形式,根控制器的count为1,所以大于1的时候就是子控制器