我在主视图上安装了一个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指标附近工作,所以你有两个选择。
实现一个手势识别器委托方法 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))
}
第二种情况在下面的示例中实现 计划