나는 탭과 긴 대기 제스처 인식기를 결합하는 방법에 대한 스택 교환 게임 개발 사이트에 this question를 요청, 다음과 같은 답변을 받았습니다 :touchesBegan과 touchesEnded 사이에 호출되는 메서드가 있습니까?
이 사람이 한 번 타이머를 설정하는 것입니다 처리하는 방법을 전화를 두드린다. 당신이 구현하려는 가장 사용자 친화적 인 시나리오는 다음과 같이 보일 것입니다 : 당신이 탭을 감지하면, 각 프레임에 타이머 (t = timeToRepeat)
을 설정
- 는 DT
에 의해 타이머를 감소- 타이머가 0에 도달하면, 스프라이트에게 타일을 이동하고 사용자가 타이머의 첫 번째 사이클 전에 손가락을 해제하면 타이머를
- 를 재설정, 스프라이트를 한 타일을 이동
분명히 타이머를 설정하는 시간은 스프라이트의 이동 속도를 결정합니다. 당신이 원한 행동의 종류에 따라서이 주제에 약간 변이가있다. 예를 들어, 탭을 감지하면 즉시 스프라이트를 한 번 이동하고 # 4 단계를 무시할 수 있습니다.
나는이 그것을 할 수있는 방법입니다 동의, 그래서이를 구현하려고하고 그렇게 할 수있는 다음 코드로 올라와있다 :
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//This records the time when the user touches the screen
self.startTime = [NSDate date];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSTimeInterval temp = [self.startTime timeIntervalSinceNow];
NSTimeInterval holdTime = temp * -1;
if(holdTime < self.threshold) {
//Tap
}
else {
//Hold
}
}
이 코드는 작동하지만 난 것을 깨달았다 사용자가 화면을 누르고있는 동안 타이머 코드를 호출해야하며, 마친 후에는 타이머 코드를 호출해야합니다. 따라서 은 사용자가 누르는 동안 touchesEnded에서 코드를 호출하는 방법이 있습니까?
나는 해답을 가지고 있지만, 나는 모든 대리인을 구현하고 체크 브레이크 포인트를 표시하려고 시도합니다. –
당신이 놓친 부분은 그들이 "타이머를 시작했다"고 말한 때였습니다. 방금 시간을 기록했습니다. 타이머 만료시 메서드를 호출하고 (그리고 스프라이트를 이동하는)이 메서드에서 반복 타이머를 시작해야합니다. touchesEnded는 타이머를 취소합니다. – lnafziger