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

开发过程中我们经常会遇到这种需求,给某个页面添加全屏的滑动返回。当然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:


      一行代码搞定全屏滑动返回手势_第1张图片
      Paste_Image.png
    • _recognizer._settings:


      一行代码搞定全屏滑动返回手势_第2张图片
      Paste_Image.png
    • _recognizer._settings._edgeSettings:


      一行代码搞定全屏滑动返回手势_第3张图片
      Paste_Image.png

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

[self.interactivePopGestureRecognizer setValue:@([UIScreen mainScreen].bounds.size.width) forKeyPath:@"_recognizer._settings._edgeSettings._edgeRegionSize"];  

你可能感兴趣的:(一行代码搞定全屏滑动返回手势)