iOS检测用户触摸释放



这可能已经张贴在这里的某个地方,但我找不到它。我正在写一个简单的iOS应用程序与两个uiview。用户将首先按住屏幕的某个区域,然后释放他们的触摸,然后快速触摸下面的第二个视图。

第一个UIView有一个UILongPressGestureRecognizer附加到它并且工作得很好。第二个UIView有一个UITapGestureRecognizer附加到它,也工作得很好。然而,我不能让这些手势识别器返回任何声明用户释放触摸的东西。

我已经尝试了这段代码,但没有效果:

- (void)holdAction:(UILongPressGestureRecognizer *)holdRecognizer
{
    if (UIGestureRecognizerStateRecognized) {
        holdLabel.text = @"Holding Correctly. Release Touch when ready.";
        holdView.backgroundColor = [UIColor greenColor];
    } else if (UIGestureRecognizerStateCancelled){
        holdLabel.text = @"Ended";
        holdView.backgroundColor = [UIColor redColor];
}

任何建议将是伟大的,特别是如果有人知道如何实现一个调用,返回用户触摸设备的状态。

经过几个小时的修修补补,我找到了一种可行的方法,但不确定这是否是最好的方法。事实证明,我需要像下面这样写代码。我没有调用我在viewDidLoad()方法中声明的特定的UIGestureRecognizer。

- (void)holdAction:(UILongPressGestureRecognizer *)holdRecognizer
{
    if (holdRecognizer.state == UIGestureRecognizerStateBegan) {
        holdLabel.text = @"Holding Correctly. Release when ready.";
        holdView.backgroundColor = [UIColor greenColor];
    } else if (holdRecognizer.state == UIGestureRecognizerStateEnded)
    {
        holdLabel.text = @"You let go!";
        holdView.backgroundColor = [UIColor redColor];
    }
}

您需要在这里使用手动触摸处理(而不是使用手势识别器)。任何UIResponder子类都可以实现以下四种方法:

– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:

通过使用这些方法,您可以访问触摸事件的每个阶段。你可能需要实现自己的逻辑来检测长按,但是你可以完全访问所有的触摸。

关于触摸处理的更多信息,这个来自WWDC 2011的会议是黄金的(需要开发帐户):

https://developer.apple.com/itunes/?destination=adc.apple.com.8270634034.08270634040.8367260921?i=1527940296

Swift 4+

 let gesture = UILongPressGestureRecognizer(target: self, action:  #selector(self.checkAction))
    self.view.addGestureRecognizer(gesture)

     @objc func checkAction(sender : UILongPressGestureRecognizer) {
        if sender.state == .ended || sender.state == .cancelled || sender.state == .failed {
        }
    }