美文网首页
RunTime: 使用全局手势完成右滑返回

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

作者: L_zix | 来源:发表于2017-03-20 17:09 被阅读224次

    听说: 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-->禁用系统手势-->加入手势

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


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

    相关文章

      网友评论

          本文标题:RunTime: 使用全局手势完成右滑返回

          本文链接:https://www.haomeiwen.com/subject/bbfinttx.html