我遇到了这个问题,但我的知识没有解决方案。解决方案必须满足2个要求:
1.捕获TouchUpInside
事件,而不是TouchUpOutside
。我需要在手指接触屏幕时立即采取行动,而不是在抬起时
2.我需要手指的位置。这就是为什么我使用UIView
——整个屏幕都是目标。
我尝试过:
1.将我的UIViewController
设置为UITapGestureRecognizer
的代理。函数gestureRecognizer:shouldReceiveTouch:
工作,但locationOfTouch:inView:
总是返回左上角作为触摸位置
2.将UIView
转换为UIControl
并调用addTarget:action:forControlEvents:
也可以,但不返回位置
3.子类UIGestureRecognizer
。我试过了,但它不起作用,因为我不知道如何覆盖touchesBegan:WithEvent:
我觉得自定义手势是唯一的方法,你能给我参考手册或示例代码吗?或者其他解决方案?感谢您的阅读。
UIPanGestureRecognizer
您可以使用UIPanGestureRecognizer
来捕捉事件。
将手势添加到您的视图中。
//Method to call for your gesture.
self.panRecognizer = UIPanGestureRecognizer(target: self, action: "panView:")
//Set delegate of Gesture
self.panRecognizer.delegate = self
//Add Gesture to the UIView
self.view.addGestureRecognizer(self.panRecognizer)
跟踪用户事件。
//Capture Gesture
func panView(recognizer: UIPanGestureRecognizer){
switch recognizer.state {
case UIGestureRecognizerState.Began: break
case UIGestureRecognizerState.Changed: break
case UIGestureRecognizerState.Ended: break
default:
break
}
}
touchesBegan:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
//Get Touch Point
let Point = touches.first!.locationInView(self.view)
}