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