听说: navigationController已经实现了右滑返回上一页.
然后打听度娘之后, 发现iOS7出来了一个新的API: interactivePopGestureRecognizer, 是navigationController的API, 系统就是通过这个API, 实现默认的右滑返回功能. 打印结果如下:
如图所示: 是一个边缘手势, 执行了target: _UINavigationInteractiveTransition 的action: handleNavigationTransition:
再看看官方文档介绍:
The gesture recognizer responsible for popping the top view controller off the navigation stack.
(就是为了从栈里pop掉最顶部的vc而存在的)
所以我们只需要把系统的手势interactivePopGestureRecognizer禁用了. 自己再加自己的全局手势上去, 把以上的target拿到, 就可以调用handleNavigationTransition:了
对了, 我们自己的手势应该加在哪个View上?=.=
跟着系统手势来就对了: 加在interactivePopGestureRecognizer.View上
知道了如何实现全局手势滑动返回之后, 我们要用RunTime实现: 只要把我们的一个分类添加进去, 就可以让不改工程任何的代码, 实现全局手势滑动返回!
1. 首先创建UINavigationController的Category
2. 通过getter, 创建自己的手势
这里的_cmd, 是SEL类型, 表示当前方法的Selector. 类似self一样表示当前对象=.=
3. 实现load方法: (load方法是文件加载完毕之后会调用)
Attention: 不是class_getClassMethod, 是class_getInstanceMethod, 一个获取类方法, 一个获取实例方法=.=
4. 在看看自己实现的push方法
拿到target-->拿到selector-->给自定义手势附上target和action-->禁用系统手势-->加入手势
大概就这样..然后华丽的把这两个文件放进工程里.就能实现全局手势滑动返回了
=.=居然不能直接上传文件.