ios - UIView pan 手势与系统手势冲突

标签 ios swift uiview uigesturerecognizer uipangesturerecognizer

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

上面的代码在几秒钟后使 home 指示器变暗。然后你需要滑动两次来关闭应用程序——第一次取消主页指示器,第二次关闭应用程序。第一次滑动两者兼而有之,调用我的平移手势识别器以及取消主页指示器。我不希望在第一次滑动期间调用我的平移手势识别器。

最佳答案

如果我理解正确,您不希望您的识别器在家庭指示器附近工作,因此您有两种选择:

  • 专门为此识别创建一个 View ,并将其底部布局到安全布局指南。
  • 实现手势识别器委托(delegate)方法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

    关于ios - UIView pan 手势与系统手势冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62172075/

    相关文章:

    ios - 每次我停止调试时发出 SIGKILL 信号

    ios - 将 NSString 转换为 NSDictionary

    c - 如何在 Swift 中实现 AudioServicesSystemSoundCompletionProc?

    swift - 我想从另一个 View Controller 传递 UIView isHidden 属性

    iPhone:UISegmentedControl 在按下状态下具有自定义图像

    android - 我可以在 flutter 中使用什么作为设备标识符?

    ios - 如何在XCode的自适应自动布局中为相同大小的类声明不同的字体大小?

    arrays - 将图像数组组合成单个图像,这是 swift 中的一行图像

    ios - 查看附近所有可发现的蓝牙设备 - Swift iOS XCode

    ios - 在另一个 View Controller 展开 segue 后重新加载 UIView 数据上的自定义 TableView