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, 创建自己的手势

getter

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

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

load方法

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

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

我的push方法

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

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,436评论 25 708
  • 首先iOS7以后系统默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功能。 但是如果我们从从导航控制器...
    稻草人12138阅读 12,219评论 0 3
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,246评论 4 61
  • 有些人有些事,在平时他也许知道一些不好的地方,但就是没决心去改,只有当出现不可挽回的结果或者去花钱,才会去...
    渔家小子阅读 684评论 0 0
  • 有一種想象 叫天馬行空 有一種思念 叫霧裡看花 有一種男人 永遠不可能停止愛妳
    张士谦阅读 188评论 0 0