Sto provando a rilevare la velocità del movimento del tocco e non ottengo sempre i risultati che mi aspetterei. (aggiunto: la velocità aumenta troppo) Qualcuno può individuare se sto facendo qualcosa di funky o suggerire un modo migliore di farlo?Rilevamento della velocità di movimento UITouch
- (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);
}
Ehi ... ho problemi ad implementarlo. La funzione lambda è parte dell'obiettivo-c? Di cosa ho bisogno per implementarlo? tia – dizy
No ... è una costante da te specificata. Più si avvicina a 1, più peso si posiziona sul valore più recente. Confronta con una media aritmetica di n valori. Ogni nuovo valore ha un peso di 1/n. Per l'esponenziale, impostare lambda = 2/(n + 1) dove n è il valore aritmetico equivalente. Quindi il nuovo valore è ponderato 2/(n + 1) invece di 1/n, e quindi la media mobile esistente viene ridimensionata di (1-lambda) = (n-1)/(n + 1) e le due sono aggiunto. Più chiaro? – Jim