UIView pan Gesture 与系统手势冲突

UIView pan Gesture conflict with system gesture

我正在主视图上安装一个 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]
   }

上面的代码在几秒钟后使主页指示灯变暗。然后您需要滑动两次以关闭该应用程序——第一次滑动以取消主页指示器的亮度,第二次滑动以关闭该应用程序。第一次滑动会同时执行这两项操作,调用我的平移手势识别器并取消主页指示器的亮度。我不想在第一次滑动时调用我的平移手势识别器。

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

  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))
    }
    

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