如何防止 UITapGestureRecognizer 快速连续识别单击?

Posted

技术标签:

【中文标题】如何防止 UITapGestureRecognizer 快速连续识别单击?【英文标题】:How do I prevent a UITapGestureRecognizer from recognizing single taps in rapid succession? 【发布时间】:2014-07-25 23:56:32 【问题描述】:

我有一个分配了UITapGestureRecognizer 实例的视图。当用户点击一次时它会正确响应,但如果用户在短时间内再次点击,我想阻止它再次识别。

我在一个游戏中使用它,用户点击位置来寻找隐藏的对象。我正试图阻止“疯狂地在屏幕上点按”策略起作用。

有没有简单的解决办法?

【问题讨论】:

【参考方案1】:

对于小于 1 秒的分辨率,我不建议使用 NSTimer。另外,它有更多的开销。阅读this answer 了解更多关于NSTimerCACurrentMediaTime() 的信息。

- (IBAction)handleTap:(UITapGestureRecognizer *)tgr 
     static NSTimeInterval previousTapTime = 0.0; // Or an ivar

     if ((CACurrentMediaTime() - previousTapTime) > 1.0) 
         // A valid tap was detected, handle it
     

     previousTapTime = CACurrentMediaTime();

【讨论】:

【参考方案2】:

使用计时器来确定是否接受点击。

创建一个名为denyTapBOOL ivar。同时添加一个名为tapTimerNSTimer ivar。

然后在您的点击识别器方法中,您执行以下操作:

- (void)tapHandler:(UITapGestureRecognizer *)gesture 
    if (!denyTap) 
        dentTap = YES;

        // process the tap as needed

        // Now setup timer - choose a desired interval
        tapTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tapTimer:) userInfo:nil repeats:NO];
    


- (void)tapTimer:(NSTimer *)timer 
    denyTap = NO;
    tapTimer = nil;

【讨论】:

以上是关于如何防止 UITapGestureRecognizer 快速连续识别单击?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止网站被*** 防止网站数据被***篡改

如何防止超卖

在winform当中提交数据,如何防止重复提交?

PostgreSQL如何防止表太大?

如何彻底防止SQL注入?

如何防止VBS的错误提示