在UIView中跟踪TouchUpInside事件



我遇到了这个问题,但我的知识没有解决方案。解决方案必须满足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)
}

最新更新