iOS:在快速平移手势过程中错误识别轻触手势。是否使用RequireTestureRecognitizer来邮件或创建自定义点击手势识别器?
目标是在iOS应用程序中同时允许平移和点击手势(以及其他手势)。然而,非常快的平底锅有时会被错误地理解为水龙头和平底锅iOS:在快速平移手势过程中错误识别轻触手势。是否使用RequireTestureRecognitizer来邮件或创建自定义点击手势识别器?,ios,swift,uigesturerecognizer,uipangesturerecognizer,uitapgesturerecognizer,Ios,Swift,Uigesturerecognizer,Uipangesturerecognizer,Uitapgesturerecognizer,目标是在iOS应用程序中同时允许平移和点击手势(以及其他手势)。然而,非常快的平底锅有时会被错误地理解为水龙头和平底锅 UITapgestureRecognitizer的类文档仅显示两个配置属性:numberOfTapsRequired和numberOfTouchesRequired.都无助于防止不期望的行为 在使点击无效之前定义触摸可以移动的最大距离是理想的,即,如果用户的手指移动超过10像素,则不要将该手势视为点击 当前的方法似乎不适用于灯光测试,即使用requiregestrerecogn
UITapgestureRecognitizer
的类文档仅显示两个配置属性:numberOfTapsRequired
和numberOfTouchesRequired.
都无助于防止不期望的行为
在使点击无效之前定义触摸可以移动的最大距离是理想的,即,如果用户的手指移动超过10像素,则不要将该手势视为点击
当前的方法似乎不适用于灯光测试,即使用requiregestrerecognizertofail
来对抗其他手势,这些手势不应与轻触手势混淆。然而,一些用户建议实现一个定制的点击手势识别器
requiregestureRecognitizerToFail
是正确的方法,还是需要滚动自定义版本的UIAPTgestureRecognitizer以消除不需要的行为
private func setSceneViewGestureRecognizers() {
// Handle one-finger pans
let panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(sceneViewPannedOneFinger))
panRecognizer.minimumNumberOfTouches = 1
panRecognizer.maximumNumberOfTouches = 1
panRecognizer.delegate = self
sceneView.addGestureRecognizer(panRecognizer)
// Handle two-finger pans
let twoFingerPanRecognizer = UIPanGestureRecognizer(target: self, action: #selector(sceneViewPannedTwoFingers))
twoFingerPanRecognizer.minimumNumberOfTouches = 2
twoFingerPanRecognizer.maximumNumberOfTouches = 2
twoFingerPanRecognizer.delegate = self
sceneView.addGestureRecognizer(twoFingerPanRecognizer)
// Handle pinches
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(sceneViewPinched))
pinchGesture.delegate = self
sceneView.addGestureRecognizer(pinchGesture)
// Handle taps
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(sceneViewTapped))
tapRecognizer.requireGestureRecognizerToFail(panRecognizer)
tapRecognizer.requireGestureRecognizerToFail(twoFingerPanRecognizer)
tapRecognizer.requireGestureRecognizerToFail(pinchGesture)
sceneView.addGestureRecognizer(tapRecognizer)
}
从您的代码来看,似乎您正在通过委托方法处理与手势识别器关联的所需操作。您是否考虑过为每个手势识别器创建特定的目标?如果这样做,则可以在目标方法的顶部添加一条guard语句,以检查recognizer.state==.end。这可能会消除歧义。@Sparky有趣。你能给出一个答案并详细说明吗?例如,您可以创建一个特殊的类来处理pan?如果您创建了一个特殊的类,为什么您甚至需要一个保护语句,因为该类应该只接收一个事件(即pan事件)?