Эй, я знаю, что об этом уже есть несколько сообщений, но я все еще не могу найти адекватный ответ на проблему, которую я испытываю.
Просто новичок в какао и 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
}