我希望在我的UIPinchGestureRecognizer完成缩放手势时得到一个回调。并且最好知道缩放手势是放大还是缩小。
有人知道可以使用的方法吗?或者实现这个功能的途径是什么?
谢谢!
我希望在我的UIPinchGestureRecognizer完成缩放手势时得到一个回调。并且最好知道缩放手势是放大还是缩小。
有人知道可以使用的方法吗?或者实现这个功能的途径是什么?
谢谢!
除了覆盖touchesEnded:方法的另一种方法是,在目标处理程序方法中只需检查手势识别器的状态即可。
-(void)handlePinchGesture:(UIGestureRecognizer*)gestureRecognizer {
if(UIGestureRecognizerStateEnded == [gestureRecognizer state]){
// do something
}
}
通过UIPinchGestureRecognizer的比例属性,您可以知道它是放大还是缩小。
只需覆盖它的touchesEnded:方法以获取回调(如果需要,可以调用其他方法)。
由于某种原因,在我的设备上进行测试时,我并没有始终收到捏合手势识别器状态为.ended
的结果。我偶尔能够触发一次,但它非常不一致。
(我想知道这是否是因为我将捏合手势识别器附加到了一个UICollectionView
,但我还没有尝试用其他视图来确认。因此,我认为重写touchesEnded
不是一个可考虑的解决方案,因为其他触摸事件/手势也在使用中。)
我能够进行的最一致的检查是确认手势识别器上的触摸点数量。
假设您已经将捏合手势识别器附加到一个视图上:
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(didReceivePinchGesture))
yourView.addGestureRecognizer(pinchGesture)
在处理程序中,我检查触摸的数量以确保它是一个捏合手势。如果不是两个触摸,则可以推断这是手势的结束:
@objc func didReceivePinchGesture(_ gestureRecognizer: UIPinchGestureRecognizer) {
guard gestureRecognizer.numberOfTouches == 2 else {
// Logic for pinch gesture ended
return
}
if gestureRecognizer.state == .began {
...
} else if gestureRecognizer.state == .changed {
...
} else {
// Same logic for pinch gesture ended (though rarely invoked)
}
}
警告:当进行测试时,就像如果你在不同的毫秒内没有同时抬起手指,.ended
状态就不会被触发一样,似乎即使只有一个触摸在开始时,手势识别器也会被调用,如果你的手指在屏幕上触摸的时间不完全相同。
我明确地在状态等于.began
时开始处理手势的逻辑,所以这对我的逻辑没有任何负面影响。然而,根据你想要实现的目标,这可能是一个问题。