检测手指的抬起/按下 UITapGestureRecognizer

12
我该如何使用UITapGestureRecognizer来判断手指何时按下和何时抬起? 官方文档说我应该只处理UIGestureRecognizerStateEnded状态来判断是否为点击事件,所以当手指按下时可能会收到UIGestureRecognizerStateBegan状态,但实际上我只能获取到UIGestureRecognizerStateEnded状态。 我用以下代码来注册手势识别器:
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]

如果你有同样的问题,可以查看这个链接,它非常好:guides.codepath.com - MoVod
2个回答

20

UITapGestureRecognizer是一种离散的手势识别器,因此永远不会转换到开始或更改状态。摘自UIGestureRecognizer Class Reference:

离散手势从Possible状态转换为Recognized(UIGestureRecognizerStateRecognized)或Failed(UIGestureRecognizerStateFailed),具体取决于它们是否成功解释手势。如果手势识别器转换为Recognized,则向其目标发送其操作消息。

(当然要记住UIGestureRecognizerStateRecognized == UIGestureRecognizerStateEnded)。

文档表示,您应检查轻拍手势识别器的状态,以确保它处于已结束状态,然后再触发代码以表明它已被识别。他们并没有说轻拍手势实际上会转换到开始或更改状态(尽管我承认文档中使用的语言有点误导!)。

如果您想要检查轻拍手势识别器的按下事件,我建议直接使用touchesBegan:withEvent:,因为这才是您真正需要的。


4

你可以重写代理方法-(BOOL)gestureRecognizer:shouldReceiveTouch:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    NSLog(@"Hello from press down");

    return YES;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接