1

我想使用手势识别器同时捕捉鼠标向下和鼠标向上。但是,当鼠标向下被捕获时,鼠标向上永远不会被捕获。

这是我所做的:

首先创建一个自定义 MouseGestureRecognizer:

@implementation MouseGestureRecognizer
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
    [super touchesBegan:touches withEvent:event];  
    self.state = UIGestureRecognizerStateRecognized;  
}  

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
    [super touchesEnded:touches withEvent:event];  
    self.state = UIGestureRecognizerStateRecognized;  
}  
@end  

然后将识别器绑定到视图控制器中的视图:

UIGestureRecognizer *recognizer = [MouseGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];  
[self.view addGestureRecognizer:recognizer];  

当我在视图中单击鼠标时,将调用 touchesBegan,但从不调用 touchesEnded。是因为 UIGestureRecognizerStateRecognized 吗?

4

2 回答 2

4

也许您可以使用 aUILongPressGestureRecognizer而不是minimumPressDurationset to 0

于 2011-11-26T12:15:06.143 回答
2

来自方法的UIGestureRecognizer 类参考reset

reset在手势识别器状态设置为 UIGestureRecognizerStateEnded 或 UIGestureRecognizerStateRecognized 后,运行时调用此方法 ( )。(...) 调用此方法后,运行时会忽略 所有剩余的活动触摸;也就是说,手势识别器不会收到已经开始但尚未结束的触摸的进一步更新。

所以,是的,这是因为您将状态设置为UIGestureRecognizerStateRecognizedin touchesBegan

编辑

作为一种解决方法,您可以制作两个识别器,一个用于touchesBegan,另一个用于touchesEnded,然后将它们都添加到目标视图中:

UIGestureRecognizer *recognizer1 = [TouchDownGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
UIGestureRecognizer *recognizer2 = [TouchUpGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[self.view addGestureRecognizer:recognizer1];
[self.view addGestureRecognizer:recognizer2];
于 2010-12-16T23:05:59.133 回答