我有一個分配給它的UITapGestureRecognizer
實例。它在用戶點擊一次時正確響應,但是如果用戶在短時間內再次點擊,我想阻止它再次識別。如何防止UITapGestureRecognizer快速連續識別單擊?
我在用戶點擊位置以查找隱藏對象的遊戲中使用此功能。我正在努力防止「在整個屏幕上瘋狂點擊」戰略。
有沒有簡單的解決方案呢?
我有一個分配給它的UITapGestureRecognizer
實例。它在用戶點擊一次時正確響應,但是如果用戶在短時間內再次點擊,我想阻止它再次識別。如何防止UITapGestureRecognizer快速連續識別單擊?
我在用戶點擊位置以查找隱藏對象的遊戲中使用此功能。我正在努力防止「在整個屏幕上瘋狂點擊」戰略。
有沒有簡單的解決方案呢?
我不建議使用NSTimer
的分辨率小於1秒。另外,它有更多的開銷。有關NSTimer
vs CACurrentMediaTime()
的更多信息,請閱讀this answer。
- (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();
}
使用計時器確定是否接受分接頭。
創建一個BOOL
ivar,命名爲denyTap
。還要添加一個名爲tapTimer
的伊瓦爾NSTimer
。
然後在水龍頭識別方法,你做這樣的事情:
- (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;
}
美麗,謝謝。 –