UIView平移手势与系统手势冲突。

问题描述 投票:0回答:1

我在主视图上安装了一个UIPanGestureRecognizer,如下图。

  panGesture = UIPanGestureRecognizer(target: self, action: #selector(previewPanned(_:))
  panGesture?.minimumNumberOfTouches = 1
  panGesture?.maximumNumberOfTouches = 1               
  view.addGestureRecognizer(panGesture!)

问题是它与系统在主界面上的滑动手势同时被识别,以取消应用程序。如何避免这种冲突?

编辑:当我使用下面的代码调暗主屏幕按钮时,问题就出现了---------------------------------。

   override var prefersHomeIndicatorAutoHidden: Bool {
      return false
   }

   override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
       return [.bottom, .top]
   }

上面的代码在几秒钟后将主屏幕指示灯变暗,然后你需要滑动两次来关闭应用--第一次是取消主屏幕指示灯,第二次是关闭应用。然后你需要轻扫两次来取消应用--第一次取消主屏指示灯,第二次取消应用。第一次滑动可以同时做到这两点,调用我的平移手势识别器以及取消主屏幕指示灯。我不希望在第一次轻扫时调用手势识别器。

ios swift uiview uigesturerecognizer uipangesturerecognizer
1个回答
3
投票

如果我理解的没错,你不希望你的识别器在home指标附近工作,所以你有两个选择。

  1. 为这个识别器创建一个专门的视图 并将其底部布局到安全布局指南上
  2. 实现一个手势识别器委托方法 shouldReceive touch: 并检查触摸是否在保存范围内。

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        let safeAreaFrame = view.bounds.inset(by: view.safeAreaInsets)
        return safeAreaFrame.contains(touch.location(in: view))
    }
    

第二种情况在下面的示例中实现 计划

© www.soinside.com 2019 - 2024. All rights reserved.