временная метка и вычисление скорости смахивания

Эй, я знаю, что об этом уже есть несколько сообщений, но я все еще не могу найти адекватный ответ на проблему, которую я испытываю.

Просто новичок в какао и iOS, сейчас я разрабатываю свою первую игру для iOS. В этой игре я хотел бы иметь возможность рассчитать скорость свайпа пользователя. У меня нет проблем с определением расстояния между последовательными касаниями в движении смахивания, но у меня возникают трудности с определением времени, прошедшего между касаниями

  • в touchesMoved:Я выполняю вычисления с текущим касанием, а также отслеживать последнее ранее записанное касание как UITouch

  • в touchesEnded:Теперь я хочу рассчитать скорость прокрутки, но когда я делаю что-то вроде:

    double timeDelay = event.timestamp - self.previousTouch.timestamp;

это всегда возвращает 0.

Однако, используя gcc, я вижу, что две временные метки на самом деле НЕ совпадают.Кроме того, при проверке я увидел, что значения NSTimeInterval для этих событий имеют величину ~ 10 ^ (-300). Это кажется странным, поскольку NSTimeInterval должен сообщать о секундах с момента запуска системы, не так ли?

Я также пытался отслеживать NSDate предыдущего касания и использовать его в сочетании с [NSDate timeIntervalSinceNow]. Это дало еще более странные результаты, каждый раз возвращая значение около 6. Опять же, поскольку timerIntervalSinceNow возвращает NSTimeInterval, это значение очень странное.

Что я не понимаю в отметках времени? Мероприятия? Любая помощь по этому вопросу будет принята с благодарностью! Спасибо за ваше время

некоторый вспомогательный код:

В sampleController.h:

@property(nonatomic) UITouch* previousTouch
@property(nonatomic) UITouch* currentTouch

В sampleController.m:

@synthesize previousTouch = _previousTouch, currentTouch = _currentTouch;
...
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
       self.currentTouch = [[event allTouches] anyObject];
       // do stuff with currentTouch
}
...
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
       self.previousTouch = self.currentTouch;
       self.currentTouch = [[event allTouches] anyObject];
       // do stuff with currentTouch
}
...
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
       float distanceMoved = [self.touch locationInView:self.playView].x - 
              [self.touch previousLocationInView:self.playView].x;
       // attempt 1
       double timeElapsed = self.currentTouch.timestamp - self.previousTouch.timestamp;

       // attempt 2
       double timeElapsed = event.timestamp - self.previousTouch.timestamp;

       // do stuff with distanceMoved and timeDelay
}
5
задан Cezar 18 March 2013 в 18:02
поделиться