UITouch касается изменения направления и скорости пальцев

Как я могу получить скорость и направление движения пальцев в функции touchmoved?

Я хочу получить скорость пальца и направление пальца и применить его в направлении движения класса UIView и скорости анимации.

Я прочитал эту ссылку, но я не могу понять ответ, кроме того, это не объясняет, как я могу определить направление:

Обнаружение скорости движения UITouch

до сих пор я пробовал этот код:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *anyTouch = [touches anyObject];
    CGPoint touchLocation = [anyTouch locationInView:self.view];
    //NSLog(@"touch %f", touchLocation.x);
    player.center = touchLocation;
    [player setNeedsDisplay];
    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 = [self distanceBetweenPoints:location :prevLocation];
    NSTimeInterval timeSincePrevious = event.timestamp - previousTimestamp;

    NSLog(@"diff time %f", timeSincePrevious);
}

Ответ 1

Направление будет определяться по значениям "location" и "prevLocation" в касанияхMoved. В частности, местоположение будет содержать новую точку касания. Например:

if (location.x - prevLocation.x > 0) {
    //finger touch went right
} else {
    //finger touch went left
}
if (location.y - prevLocation.y > 0) {
    //finger touch went upwards
} else {
    //finger touch went downwards
}

Теперь touchhesMoved будет вызван много раз для данного движения пальца. Это будет ключом к вашему коду, чтобы сравнить начальное значение, когда палец сначала касается экрана, со значением CGPoint, когда движение наконец завершено.

Ответ 2

почему не только ниже в качестве вариации на obuseme ответ

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

         UITouch *aTouch = [touches anyObject];
         CGPoint newLocation = [aTouch locationInView:self.view];
         CGPoint prevLocation = [aTouch previousLocationInView:self.view];

         if (newLocation.x > prevLocation.x) {
                 //finger touch went right
         } else {
                 //finger touch went left
         }
         if (newLocation.y > prevLocation.y) {
                 //finger touch went upwards
         } else {
                 //finger touch went downwards
         }
}