这可能已在某处发布,但我找不到它。我正在编写一个带有两个UIViews的简单iOS应用程序。用户将首先按住屏幕的某个区域,然后释放它们的触摸,然后快速触摸下面的第二个视图。
第一个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];
}
任何建议都会很棒,特别是如果有人知道如何实现一个返回用户触摸设备状态的调用。我查看了开发人员文档并且空洞了。
答案 0 :(得分:10)
经过几个小时的修补,我发现了一种有效的方法,不确定它是否是最好的方法。结果我需要像下面的代码一样编写它。我没有调用我在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];
}
}
答案 1 :(得分:2)
您需要在此处使用手动触控处理(与使用手势识别器相反)。任何UIResponder子类都可以实现以下四种方法:
– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:
通过使用这些方法,您可以访问触摸事件的每个阶段。您可能必须实现自己的逻辑来检测长按,但您可以完全访问所有触摸。
有关触摸处理的更多信息,来自WWDC 2011的此会话是黄金(需要开发帐户):
答案 2 :(得分:1)
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 {
}
}