检测用户是否触摸了iOS上的屏幕

时间:2014-04-09 15:05:30

标签: ios cocoa-touch

我搜索了其他几个问题和教程,但找不到我的问题的答案。我想检测用户是否触摸/轻击/按住/单击了屏幕。我尝试使用touchesBegan: withEvent:,但它没有触发任何事件。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch view] == mapView_) {
    NSLog(@"Touches began");
} else NSLog(@"Touches began");

}

是否有其他方法可以通过触摸屏幕来检测用户互动?

3 个答案:

答案 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");
}