Estoy tratando de detectar la velocidad del movimiento táctil y no siempre obtengo los resultados que esperaba. (añadido: Picos de velocidad demasiado) ¿Alguien puede detectar si estoy haciendo algo funky o sugerir una forma mejor de hacerlo?UITouch detección de la velocidad de movimiento
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
self.previousTimestamp = event.timestamp;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
CGPoint prevLocation = [touch previousLocationInView:self.view];
CGFloat distanceFromPrevious = distanceBetweenPoints(location,prevLocation);
NSTimeInterval timeSincePrevious = event.timestamp - self.previousTimestamp;
CGFloat speed = distanceFromPrevious/timeSincePrevious;
self.previousTimestamp = event.timestamp;
NSLog(@"dist %f | time %f | speed %f",distanceFromPrevious, timeSincePrevious, speed);
}
Oye ... tengo problemas para implementar esto. ¿La función lambda es parte del objetivo-c? ¿Qué necesito para implementarlo? tia – dizy
No ... es una constante que usted mismo especifica. Cuanto más cerca esté de 1, más peso colocará en el valor más nuevo. Compare con una media aritmética de n valores. Cada nuevo valor tiene un peso de 1/n. Para exponencial, establezca lambda = 2/(n + 1) donde n es el valor aritmético equivalente. Entonces, el nuevo valor se pondera 2/(n + 1) en lugar de 1/n, y luego el promedio móvil existente se reduce por (1-lambda) = (n-1)/(n + 1) y los dos son adicional. ¿Más claro? – Jim