Ios 在swift中避免UIPinchGestureRecognitor中的三个手指夹伤

Ios 在swift中避免UIPinchGestureRecognitor中的三个手指夹伤,ios,swift,uipinchgesturerecognizer,Ios,Swift,Uipinchgesturerecognizer,根据苹果的文档,捏是一种连续的手势&意味着用两个手指来使用。即使用三个手指捏一下,它在swift 4.1中也能正常工作 我试着打印触摸次数。即使有三个手指,它也能提供2次触摸。它似乎检测到了前两个手指的触碰,而忽略了第三个手指的触碰,所以无法过滤 @objc func pinch(pinchGesture: UIPinchGestureRecognizer){ if pinchGesture.state == UIGestureRecognizerState.began { prin

根据苹果的文档,捏是一种连续的手势&意味着用两个手指来使用。即使用三个手指捏一下,它在swift 4.1中也能正常工作

我试着打印触摸次数。即使有三个手指,它也能提供2次触摸。它似乎检测到了前两个手指的触碰,而忽略了第三个手指的触碰,所以无法过滤

@objc func pinch(pinchGesture: UIPinchGestureRecognizer){
  if pinchGesture.state == UIGestureRecognizerState.began {
    print("number of touches:\(pinchGesture.numberOfTouches)")
  }
}
我正在调用viewDidLoad中的setup手势()方法。因此,它处理相关的用户捏手势

func setupGestures(){

        let pinch = UIPinchGestureRecognizer(target: self, action: #selector(self.pinch))
        pinch.delegate = self
        self.addGestureRecognizer(pinch)

    }

在ios中,有没有任何可能的方法来避免三个手指的挤压

您可以在以下位置过滤触摸:

func touchesBegan(_ touches: Set<UITouch>, 
         with event: UIEvent)
func touchsbegind(touchs:Set,
带事件:UIEvent)
例如,从参数
touchs
中获取触摸次数,如果
touchs.count>2
则不执行此手势-忽略它

编辑(1):


在你编辑之后,我有了另一个想法(我身上没有Mac,所以我现在不能尝试这个)。尝试从委托使用。在接受之前,你应该能够取得联系。我看不到这样的信息:是调用一次,还是每次触摸(每个手指)调用一次。也许你可以在某种程度上使用它?

最近我找到了解决这个问题的方法。这可能不是最好的解决方案,也可能是替代方案。但它是有效的

这里我只保留一个布尔值

 var numberOfAllTouchesLessThanOrEqualsToTwo = false
我使用事件处理程序设置布尔值

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

            if (event?.allTouches?.count)! > 2 {
                numberOfAllTouchesLessThanOrEqualsToTwo = false
            }else{
                numberOfAllTouchesLessThanOrEqualsToTwo = true
            }

        }

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

            if (event?.allTouches?.count)! > 2 {
                numberOfAllTouchesLessThanOrEqualsToTwo = false
            }else{
                numberOfAllTouchesLessThanOrEqualsToTwo = true
            }

        }

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

            if (event?.allTouches?.count)! > 2 {
                numberOfAllTouchesLessThanOrEqualsToTwo = false
            }else{
                numberOfAllTouchesLessThanOrEqualsToTwo = true
            }
        }

它起作用了

顺便说一句,我使用的是手势识别器(UIPinchGestureRecognizer),而不是触摸事件。我尝试了您之前建议的方法。但即使有3个手指,触摸的次数(pinchGesture.NumberOfTouchs)也显示为2。这意味着它首先考虑两个手指,而忽略第三指触摸。所以它似乎适用于三指触摸。@user8028778请尝试我的编辑。我现在无法测试它,但可能会有帮助。我也尝试过使用此委托方法。但它是在触摸开始之前调用的(正如苹果文档中声明的)。因此,gestureRecognizer.NumberOfTouchs始终为零,因为它在触摸开始前被调用。如果是这样,您可能需要对
UIPinchGestureRecognizer
进行子类化,并更改
touchesBegin
中的逻辑。我想变化应该很小,也不难。如果你不能自己解决它,我可以试着在几个小时内测试它?这不是委托方法。。。是事件处理程序吗?你能展示一下它是如何调用/连接到手势识别器的创建的吗。编辑。很抱歉给你带来了困惑。
@objc func pinch(pinchGesture: UIPinchGestureRecognizer){

     if pinchGesture.state == UIGestureRecognizerState.changed {
          if numberOfAllTouchesLessThanOrEqualsToTwo {
            //code
          }
      }
 }