我在Stack Exchange游戏开发网站上询问this question如何组合点按和长按手势识别器,并收到以下答案:
处理此问题的方法是在用户点按手机后设置计时器。您实现的最友好用户的方案如下所示:
- 检测到水龙头时,请设定计时器(t = timeToRepeat)
- 在每个帧上,按dt
减少计时器
- 如果计时器到达零,则将精灵移动到一个图块并重置计时器
- 如果用户在计时器的第一个循环之前松开手指,请移动精灵一个瓦片
醇>显然,您设置计时器的时间将决定精灵的移动速度。根据您想要的行为类型,此主题有一些变体。例如,您可以在检测到点击后立即移动精灵,并忽略步骤#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中的代码?
答案 0 :(得分:2)
从技术上讲,如果用户完全保持他/她的手指,则他们之间不会调用任何方法。但在实践中,touchesMoved
被称为一堆。您应该只使用NSTimer
,而不是自己跟踪时间