touchesBegan和touchesEnded之间是否有一个方法?

时间:2013-04-29 17:36:05

标签: ios objective-c uiview touchesbegan touches

我在Stack Exchange游戏开发网站上询问this question如何组合点按和长按手势识别器,并收到以下答案:

  

处理此问题的方法是在用户点按手机后设置计时器。您实现的最友好用户的方案如下所示:

     
      
  1. 检测到水龙头时,请设定计时器(t = timeToRepeat)
  2.   
  3. 在每个帧上,按dt
  4. 减少计时器   
  5. 如果计时器到达零,则将精灵移动到一个图块并重置计时器
  6.   
  7. 如果用户在计时器的第一个循环之前松开手指,请移动精灵一个瓦片
  8.         

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

1 个答案:

答案 0 :(得分:2)

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