Question

J'ai ce code pour le geste dans une vue

- (void)rightSwipeHandle:(UIPanGestureRecognizer*)gestureRecognizer{

    CGPoint touchBegan;
    CGPoint pointEnd;

    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) 
    {   
        CGPoint touchBegan = [gestureRecognizer locationInView: gestureRecognizer.view];
        NSLog(@"pointBegan:%@",NSStringFromCGPoint(touchBegan));
    }
    else if (gestureRecognizer.state == UIGestureRecognizerStateChanged)
    {
    }

    else if (gestureRecognizer.state == UIGestureRecognizerStateEnded     ||
             gestureRecognizer.state == UIGestureRecognizerStateCancelled ||
             gestureRecognizer.state == UIGestureRecognizerStateFailed)
    {   
        pointEnd = [gestureRecognizer locationInView:gestureRecognizer.view];
        NSLog(@"pointEnd:%@", NSStringFromCGPoint(pointEnd));

        CGFloat xDist = (pointEnd.x - touchBegan.x);
        CGFloat yDist = (pointEnd.y - touchBegan.y);
        CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
        NSLog(@"distance:%f", distance);
    }


}

mais cela ne fonctionne pas bien et je ne sais pas où est le problème ... si le balayage est du bas vers le haut, il calcule une distance et si vous faites le contraire, il calcule une grande distance différente, je ne comprends pas

Était-ce utile?

La solution

Définissez les points comme statiques, sinon le point touchBegan perdra sa valeur.Cela se produit parce que la définition des valeurs de chaque point se produit dans différents appels de méthode et avec chacun, vous redéfinissez les points au début.

static CGPoint touchBegan;
static CGPoint pointEnd;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top