iOS:在快速平移手势过程中错误识别轻触手势。是否使用RequireTestureRecognitizer来邮件或创建自定义点击手势识别器?

iOS:在快速平移手势过程中错误识别轻触手势。是否使用RequireTestureRecognitizer来邮件或创建自定义点击手势识别器?,ios,swift,uigesturerecognizer,uipangesturerecognizer,uitapgesturerecognizer,Ios,Swift,Uigesturerecognizer,Uipangesturerecognizer,Uitapgesturerecognizer,目标是在iOS应用程序中同时允许平移和点击手势(以及其他手势)。然而,非常快的平底锅有时会被错误地理解为水龙头和平底锅 UITapgestureRecognitizer的类文档仅显示两个配置属性:numberOfTapsRequired和numberOfTouchesRequired.都无助于防止不期望的行为 在使点击无效之前定义触摸可以移动的最大距离是理想的,即,如果用户的手指移动超过10像素,则不要将该手势视为点击 当前的方法似乎不适用于灯光测试,即使用requiregestrerecogn

目标是在iOS应用程序中同时允许平移和点击手势(以及其他手势)。然而,非常快的平底锅有时会被错误地理解为水龙头和平底锅

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事件)?