我正在主视图上安装UIPanGestureRecognizer,如下所示:
panGesture = UIPanGestureRecognizer(target: self, action: #selector(previewPanned(_:))
panGesture?.minimumNumberOfTouches = 1
panGesture?.maximumNumberOfTouches = 1
view.addGestureRecognizer(panGesture!)
问题在于它可以同时通过Home指示器上的系统滑动手势来识别,以关闭该应用程序。如何避免这种冲突?
编辑:使用以下代码使主页按钮指示器变暗时,会出现问题-
override var prefersHomeIndicatorAutoHidden: Bool {
return false
}
override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
return [.bottom, .top]
}
以上代码在几秒钟后使主页指示灯变暗。然后,您需要滑动两次以关闭应用程序-第一个用于取消显示主屏幕指示灯,第二个用于关闭应用程序。第一次滑动会同时完成,调用我的平移手势识别器并取消原点指示器的显示。我不希望在第一次滑动时调用我的平移手势识别器。
答案 0 :(得分:3)
如果我对您的理解正确,则您不希望识别器在原位指示器附近工作,因此您有两种选择:
实施手势识别器委托方法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
中实现了第二种情况