RunTime: 使用全局手势完成右滑返回

听说: navigationController已经实现了右滑返回上一页.

然后打听度娘之后, 发现iOS7出来了一个新的API: interactivePopGestureRecognizer, 是navigationController的API, 系统就是通过这个API, 实现默认的右滑返回功能. 打印结果如下: 

interactivePopGestureRecognizer的log

如图所示: 是一个边缘手势, 执行了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, 创建自己的手势

RunTime: 使用全局手势完成右滑返回_第1张图片
getter

这里的_cmd, 是SEL类型, 表示当前方法的Selector. 类似self一样表示当前对象=.=

3. 实现load方法: (load方法是文件加载完毕之后会调用)

RunTime: 使用全局手势完成右滑返回_第2张图片
load方法

Attention: 不是class_getClassMethod, 是class_getInstanceMethod, 一个获取类方法, 一个获取实例方法=.=

4. 在看看自己实现的push方法

RunTime: 使用全局手势完成右滑返回_第3张图片
我的push方法

拿到target-->拿到selector-->给自定义手势附上target和action-->禁用系统手势-->加入手势

大概就这样..然后华丽的把这两个文件放进工程里.就能实现全局手势滑动返回了


=.=居然不能直接上传文件. 

你可能感兴趣的:(RunTime: 使用全局手势完成右滑返回)