2014-07-25 7 views
0

UITapGestureRecognizer 인스턴스가 할당 된보기가 있습니다. 사용자가 한 번 탭하면 올바르게 응답하지만 사용자가 짧은 시간 내에 다시 탭하면 다시 인식하지 못하도록하고 싶습니다.UITapGestureRecognizer가 단일 탭을 빠르게 인식하지 못하도록하려면 어떻게합니까?

나는 사용자가 숨겨진 물건을 찾기 위해 위치를 두드리는 게임에서 이것을 사용하고 있습니다. 나는 "화면에서 온통 미친 듯이 두드리기"전략이 효과를 발휘하지 못하게하려고 노력하고 있습니다.

간단한 해결책이 있습니까?

답변

1

:

는 그런 다음 탭의 인식 방법에 당신이 그런 짓을. 게다가, 오버 헤드가 더 많습니다. NSTimerCACurrentMediaTime()에 대한 자세한 내용은 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 ivar을 추가하십시오. 내가 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; 
} 
관련 문제