在UIView

时间:2015-11-02 22:38:18

标签: ios swift

我遇到了这个问题,而且我的知识无法解决。解决方案必须满足2个要求:
1.抓住TouchUpInside事件,而不是TouchUpOutside。我需要在手指触摸屏幕时立即采取行动,而不是在抬起时采取行动 我需要手指的位置。这就是我使用UIView的原因 - 整个屏幕是一个目标。

我试过了:
1.设置UIViewController作为UITapGestureRecognizer的代理人。函数gestureRecognizer:shouldReceiveTouch:有效,但locationOfTouch:inView:始终返回左上角作为触摸位置 2.将UIView投射到UIControl并调用addTarget:action:forControlEvents:也可以,但不会返回该位置。
3.子类化UIGestureRecognizer。我尝试了这个,但它不起作用,因为我不知道如何覆盖touchesBegan:WithEvent:

我觉得自定义手势是唯一的方法,请您参考手册或示例代码?或者其他解决方案?谢谢你的阅读。

1 个答案:

答案 0 :(得分:-1)

UIPanGestureRecognizer

您可以使用UIPanGestureRecognizer来捕获事件。

将Gesture添加到您的视图中。

//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)
}