UISwipeGestureRecognizer Swipe length

Aucune idée si il existe un moyen d'obtenir la longueur d'un geste de balayage ou la touche pour que je puisse calculer la distance?

31
demandé sur Sebastian Celis 2011-01-28 16:39:22

5 réponses

il est impossible d'obtenir une distance à partir d'un geste de swipe, parce que le SwipeGesture déclenche la méthode où vous pourriez accéder à l'emplacement exactement une fois, lorsque le geste a pris fin.

Peut-être que vous voulez utiliser un UIPanGestureRecognizer.

S'il vous est possible d'utiliser pan gestuel, vous sauvegarderez le point de départ de la casserole, et si la casserole est terminée, calculez la distance.

- (void)panGesture:(UIPanGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateBegan) {
        startLocation = [sender locationInView:self.view];
    }
    else if (sender.state == UIGestureRecognizerStateEnded) {
        CGPoint stopLocation = [sender locationInView:self.view];
        CGFloat dx = stopLocation.x - startLocation.x;
        CGFloat dy = stopLocation.y - startLocation.y;
        CGFloat distance = sqrt(dx*dx + dy*dy );
        NSLog(@"Distance: %f", distance);
    }
}
55
répondu Matthias Bauch 2011-01-28 14:32:03

Rapide

 override func viewDidLoad() {
    super.viewDidLoad()

    // add your pan recognizer to your desired view
    let panRecognizer = UIPanGestureRecognizer(target: self, action:  #selector(panedView))
    self.view.addGestureRecognizer(panRecognizer)

}

   @objc func panedView(sender:UIPanGestureRecognizer){
        var startLocation = CGPoint()
        if (sender.state == UIGestureRecognizerState.began) {
            startLocation = sender.location(in: self.view)
        }
        else if (sender.state == UIGestureRecognizerState.ended) {
            let stopLocation = sender.location(in: self.view)
            let dx = stopLocation.x - startLocation.x;
            let dy = stopLocation.y - startLocation.y;
            let distance = sqrt(dx*dx + dy*dy );
            NSLog("Distance: %f", distance);

        if distance > 400 {
            //do what you want to do
        }
    }
}

Hope qui aide tous vous Swift pionniers

15
répondu ColossalChris 2018-06-25 18:08:48

vous ne pouvez le faire que de manière standard: souvenez-vous du point de contact de touchBegin et comparez le point de touchEnd.

2
répondu Oleg Danu 2011-01-28 14:28:31

pour ceux d'entre nous qui utilisent de la Xamarine:

void panGesture(UIPanGestureRecognizer gestureRecognizer) {
    if (gestureRecognizer.State == UIGestureRecognizerState.Began) {
        startLocation = gestureRecognizer.TranslationInView (view)
    } else if (gestureRecognizer.State == UIGestureRecognizerState.Ended) {
        PointF stopLocation = gestureRecognizer.TranslationInView (view);
        float dX = stopLocation.X - startLocation.X;
        float dY = stopLocation.Y - startLocation.Y;
        float distance = Math.Sqrt(dX * dX + dY * dY);
        System.Console.WriteLine("Distance: {0}", distance);
    }
}
2
répondu IceWarrior353 2014-04-29 21:55:19
func swipeAction(gesture: UIPanGestureRecognizer) {
    let transition = sqrt(pow(gesture.translation(in: view).x, 2)
                     + pow(gesture.translation(in: view).y, 2))
}
1
répondu Møhãməđ Đąŕwîčh 2017-08-26 09:02:56