避免在 Swift 中的 UIPinchGestureRecognizer 中捏三根手指



根据苹果文档,捏合是一种连续的手势,意思是用两根手指使用。即使用三根手指捏住,在 swift 4.1 中似乎也能正常工作。

我尝试打印触摸次数。即使使用三个手指,它的触摸次数也为 2。它似乎检测到前 2 个手指触摸并忽略第三个。所以没有办法过滤。

@objc func pinch(pinchGesture: UIPinchGestureRecognizer){
if pinchGesture.state == UIGestureRecognizerState.began {
print("number of touches:(pinchGesture.numberOfTouches)")
}
}

我在viewDidLoad中调用setupGesture((方法。因此,它处理相关的用户捏合手势。

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)

例如,从参数touches中获取触摸次数,如果touches.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
}
}

我在手势识别器中使用了这个布尔值。

@objc func pinch(pinchGesture: UIPinchGestureRecognizer){
if pinchGesture.state == UIGestureRecognizerState.changed {
if numberOfAllTouchesLessThanOrEqualsToTwo {
//code
}
}
}

它有效。

最新更新