我搜索了其他几个问题和教程,但找不到我的问题的答案。我想检测用户是否触摸/轻击/按住/单击了屏幕。我尝试使用touchesBegan: withEvent:
,但它没有触发任何事件。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch view] == mapView_) {
NSLog(@"Touches began");
} else NSLog(@"Touches began");
}
是否有其他方法可以通过触摸屏幕来检测用户互动?
答案 0 :(得分:1)
您必须使用UITapGestureRecognizer。
使您的班级符合UIGestureRecognizerDelegate
协议。
实例化手势识别器。例如,要实例化UITapGestureRecognizer,我们将执行:
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
这里,action是处理手势的选择器。在这里,我们的选择器handleTapFrom看起来像:
- (void) handleTapFrom: (UITapGestureRecognizer *)recognizer
{
//Code to handle the gesture
}
选择器的参数是手势识别器。我们可以使用这个手势识别器来访问它的属性,例如,我们可以找到手势识别器的状态,比如UIGestureRecognizerStateBegan,UIGestureRecognizerStateEnded等。
在实例化的手势识别器上设置所需的属性。例如,对于UITapGestureRecognizer,我们可以设置属性numberOfTapsRequired和numberOfTouchesRequired。
将手势识别器添加到要检测手势的视图中。在我们的示例代码中(我将分享该代码供您参考),我们将使用以下代码行向imageView添加手势识别器:
[self.imageView addGestureRecognizer:tapGestureRecognizer];
将手势识别器添加到视图后,设置手势识别器的委托,即将处理所有手势识别器内容的类。在我们的示例代码中,它将是:
tapGestureRecognizer.delegate = self;
注意:将手势识别器添加到视图后分配代理。否则,将不会调用action方法。
参考 - Here
答案 1 :(得分:0)
如果您只对用户是否触摸屏幕感兴趣,可以继承UIApplication
,并实施此方法:
- (void)sendEvent:(UIEvent *)event {
[super sendEvent:event];
if (event.type == UIEventTypeTouches) {
// handling code
}
}
在这种情况下,main.m
文件将如下所示:
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, @"UIApplicationSubclass", @"AppDelegate");
}
}
答案 2 :(得分:0)
解决方案是使用UIPanGestureRecogniser
。
这里有解决问题的代码,让我头痛不已:
UIPanGestureRecognizer *tap = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
[mapView_ setMultipleTouchEnabled:YES];
[mapView_ setUserInteractionEnabled:YES];
mapView_.gestureRecognizers = @[tap];
然后是选择器方法:
- (void) handleTapFrom: (UIPanGestureRecognizer*)recogniser {
NSLog(@"Pin");
}