0

我在 Stack Exchange 游戏开发网站上问了这个问题,关于如何结合轻击和长按手势识别器,得到以下答案:

处理这个问题的方法是在对方点击电话后设置一个计时器。您要实现的最用户友好的场景如下所示:

  1. 当您检测到点击时,设置一个计时器(t = timeToRepeat)
  2. 在每一帧上,将计时器减少 dt
  3. 如果计时器达到零,将精灵移动一个图块并重置计时器
  4. 如果用户在计时器的第一个周期之前松开手指,则将精灵移动一格

显然,您设置计时器的时间量将决定您的精灵移动的速度。根据您想要的行为类型,此主题有一些变化。例如,您可以在检测到点击后立即移动精灵一次并忽略步骤#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 中的代码?

4

1 回答 1

2

从技术上讲,如果用户保持他/她的手指完全静止,则它们之间不会调用任何方法。但在实践中,touchesMoved被称为一堆。您应该只使用NSTimer虽然而不是自己跟踪时间

于 2013-04-29T17:40:27.843 回答