自定义UIGestureRecognizer用于双指手势

Mel*_*ius 6 uigesturerecognizer ios swift

我有一个自定义的UIGestureRecognizer用于双指手势完美的工作,除了它是非常挑剔的同时手指必须触摸iOS设备,touchesBegan以便通过2次触摸调用.touchesBegan虽然我试图使用两根手指,但通常只用一次Touch即可调用.

有没有什么办法可以让你对触摸屏上的手指同时放置的触摸次数更加宽容?

我注意到,即使您先放置一根手指,然后再按住另一根手指,同时仍按住第一根手指,即可识别出两根手指敲击.

这是我的touchesBegan函数的代码:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {

      if touches.count != 2 {
         state = .failed
         return
      }

      // Capture the first touch and store some information about it.
      if trackedTouch == nil {
         trackedTouch = touches.min { $0.location(in: self.view?.window).x < $1.location(in: self.view?.window).x }
         strokePhase = .topSwipeStarted
         topSwipeStartPoint = (trackedTouch?.location(in: view?.window))!
         // Ignore the other touch that had a larger x-value
         for touch in touches {
            if touch != trackedTouch {
               ignore(touch, for: event)
            }
         }
      }
   }
Run Code Online (Sandbox Code Playgroud)

ɯɐɹ*_*ɐɹʞ 1

不用担心touchesBegan:withEvent:而是使用touchesEnded:withEvent:或者touchesMoved:withEvent:如果最终状态不包含两个手指,请将其设置为.failed否则将其设置为.ended

用多个手指同时点击屏幕是不可能的,因此在此过程中touchesMoved:withEvent:您会发现两个手指。我不确定touchesEnded:withEvent:这个可能行不通,因为同时移开两根手指与同时应用两根手指一样困难,但值得一试,看看它的反应如何。