全屏滑动返回

1.导航控制器自带了滑动返回(iOS7)

2.但是设置界面没有滑动返回功能

3.恢复滑动返回

分析:为什么滑动返回失效—>覆盖了系统的返回按钮—>怎么才能让滑动返回失效

滑动返回实现原理:添加pan手势

怎么让手势失效:代理方法可以让界面不能与用户交互....

分析发现系统是通过代理让滑动返回失效的

解决办法:清空代理

4.全屏滑动返回

系统自带的是屏幕边缘滑动返回,与需求不符

我们要自己写一个滑动返回?  太麻烦

系统已经有了,把系统的拿过来改一下

5.怎么修改?

先找到对应的手势,和手势的代理,  怎么找??

滑动返回是导航控制器的功能,那么手势应该在导航控制器里面

在导航控制器头文件中搜索gesture,我们找到interactivePopGestureRecognizer

我们通过打印它可以得到一些信息

; target= <(action=handleNavigationTransition:, target=<_UINavigationInteractiveTransition 0x7fb413d0c460>)>>

在信息中我们可以找到代理,而且知道系统的手势是UIScreenEdgePanGestureRecognizer边缘手势

6.怎么修改为全屏滑动

修改手势方法为UIPanGestureRecognizer

清除系统的边缘滑动手势

手势方法调用系统的滑动返回方法,handleNavigationTransition:

设置代理为自己,不让代理方法失效

target的action滑动返回功能

// 干掉系统边缘滑动手势

self.interactivePopGestureRecognizer.enabled=NO;

// 创建UIPanGestureRecognizer:滑动返回功能

idtarget =self.interactivePopGestureRecognizer.delegate;

UIPanGestureRecognizer*pan = [[UIPanGestureRecognizeralloc]initWithTarget:targetaction:@selector(handleNavigationTransition:)];

[self.viewaddGestureRecognizer:pan];

// 设置代理,控制手势什么时候触发

pan.delegate=self;

// 每次触发手势,询问下代理是否触发手势

- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch

{

// 判断下是否是非控制器,如果是非根控制器就返回YES

returnself.childViewControllers.count>1;

}

你可能感兴趣的:(全屏滑动返回)