Marca de tiempo y velocidad de cálculo de un golpe

Hey, sé que ya hay algunas publicaciones sobre esto, pero todavía no puedo encontrar una respuesta adecuada para el problema que tengo.

Solo nuevo en Cocoa e iOS, estoy en medio de desarrollar mi primer juego de iOS. En este juego me gustaría poder calcular la velocidad del golpe de un usuario. No tengo dificultad para encontrar la distancia entre los toques sucesivos en el movimiento de deslizamiento, pero tengo problemas para determinar el tiempo transcurrido entre los toques

entouchesMoved: Hago cálculos con el toque actual, así como también hago un seguimiento del último toque grabado previamente como un UITouch

entouchesEnded: Ahora quiero calcular la velocidad de deslizamiento, pero cuando hago algo como:

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

esto siempre devuelve 0.

Sin embargo, al usar gcc puedo ver que las dos marcas de tiempo no son las mismas. Además, al inspeccionar vi que los valores de NSTimeInterval para estos eventos estaban en la magnitud de ~ 10 ^ (- 300). Esto parece extraño ya que se supone que un NSTimeInterval informa segundos desde el inicio del sistema, ¿no es así?

También he intentado hacer un seguimiento del NSDate del toque anterior y usarlo junto con [NSDate timeIntervalSinceNow]. Esto produjo resultados aún más extraños, devolviendo un valor alrededor de 6 cada vez. Nuevamente, desde timerIntervalSinceNow devuelve unNSTimeInterval, este valor es muy extraño.

¿Qué es lo que no entiendo sobre las marcas de tiempo? ¿eventos? Cualquier ayuda en esto sería muy apreciada! Gracias por tu tiempo

código de apoyo:

En sampleController.h:

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

En 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
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta