Próbuję wykryć prędkość ruchu dotyku i nie zawsze uzyskuję oczekiwane rezultaty. (dodane: zbyt szybkie skoki) Czy ktokolwiek może zauważyć, jeśli robię coś ciekawego lub sugeruję lepszy sposób na zrobienie tego?Wykrywanie prędkości ruchu 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);
}
Hej ... mam problem z zaimplementowaniem tego. Czy funkcja lambda jest częścią obiektywu-c? Czego potrzebuję do jego wdrożenia? tia – dizy
Nie ... jest to stała, którą sam określasz. Im bliżej 1, tym więcej wagi umieszczasz na najnowszej wartości. Porównaj ze średnią arytmetyczną z n wartości. Każda nowa wartość ma wagę 1/n. Dla wykładniczej, ustaw lambdę = 2/(n + 1) gdzie n jest równoważną wartością arytmetyczną. Tak więc nowa wartość jest ważona 2/(n + 1) zamiast 1/n, a następnie istniejąca średnia ruchoma jest zmniejszana o (1-lambda) = (n-1)/(n + 1), a dwie są dodany. Czyściej? – Jim