如何防止 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 了解更多关于NSTimer
与CACurrentMediaTime()
的信息。
- (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】:使用计时器来确定是否接受点击。
创建一个名为denyTap
的BOOL
ivar。同时添加一个名为tapTimer
的NSTimer
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 快速连续识别单击?的主要内容,如果未能解决你的问题,请参考以下文章