2014-07-25 32 views
0

我有一個分配給它的UITapGestureRecognizer實例。它在用戶點擊一次時正確響應,但是如果用戶在短時間內再次點擊,我想阻止它再次識別。如何防止UITapGestureRecognizer快速連續識別單擊?

我在用戶點擊位置以查找隱藏對象的遊戲中使用此功能。我正在努力防止「在整個屏幕上瘋狂點擊」戰略。

有沒有簡單的解決方案呢?

回答

1

我不建議使用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(); 
} 
+0

美麗,謝謝。 –

1

使用計時器確定是否接受分接頭。

創建一個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; 
}