シングルタップとダブルタップの検出

このエントリーを含むはてなブックマークはてなブックマーク - シングルタップとダブルタップの検出

iPhoneでダブルタップを検出する方法はこちらで紹介しました。シングルタップもダブルタップと同時に検出しようとして、

   if ([touch tapCount] == 1) {
         NSLog(@"single tap is detected!");
   } else if( [touch tapCount] == 2) {
         NSLog(@"double taps are detected!");
   }

のように記述すると、iPhone画面上でダブルタップした際に、シングルタップも同時に検出されてしまう問題が起こります。

これは、iPhone側でダブルタップがシングルタップx2と認識されてしまうのが原因です。そこで、ダブルタップが検出された場合には、シングルタップの処理をキャンセルするようにします。また、シングルタップの際には処理を0.5秒程度遅延します。こうすることで、曖昧さを排除した検出プログラムとなります。


-(void)singleTapDetected:(UITouch *)touch
{
 NSLog(@"single tap is detected!");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    if([touch tapCount] == 1){
        [self performSelector:@selector(singleTapDetected:) withObject:touch afterDelay:0.5];
        return; 
    } else if ([touch tapCount] == 2) {
         NSLog(@"double taps are detected!");
    }
}

Leave a Reply

You must be logged in to post a comment.