一行代码搞定全屏滑动返回手势

开发过程中我们经常会遇到这种需求,给某个页面添加全屏的滑动返回。当然iOS7之后,系统有提供一个边缘滑动返回的手势。很明显无法完成需求。产品要的是全屏。

  • 思路1:
    既然UINavigationController有提供interactivePopGestureRecognizer手势。 UIGestureRecognizer采用的是target-action。这样我们可以找到手势的target和action。然后新建一个自己的手势实例,替换为系统手势的action实现就是了。
    id target = self.interactivePopGestureRecognizer.delegate
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
    pan.delegate = self;
    [self.view addGestureRecognizer:pan];
    self.interactivePopGestureRecognizer.enabled = NO;

  • 思路2:
    能不能不写那么多的代码?在研究interactivePopGestureRecognizer手势的过程中。通过运行时层层打印。

    • _recognizer:


      Paste_Image.png
    • _recognizer._settings:


      Paste_Image.png
    • _recognizer._settings._edgeSettings:


      Paste_Image.png

猜测_edgeSettings属性就是我们要找的设置返回手势响应范围的。

[self.interactivePopGestureRecognizer setValue:@([UIScreen mainScreen].bounds.size.width) forKeyPath:@"_recognizer._settings._edgeSettings._edgeRegionSize"];  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容