UISwipeGestureRecognizer Swipe length UISwipeGestureRecognizer Swipe length ios ios

UISwipeGestureRecognizer Swipe length


It's impossible to get a distance from a swipe gesture, because the SwipeGesture triggers the method where you could access the location exactly one time, when the gesture has ended.
Maybe you want to use a UIPanGestureRecognizer.

If it possible for you to use pan gesture you would save the starting point of the pan, and if the pan has ended calculate the 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);    }}


In Swift

 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()        //UIGestureRecognizerState has been renamed to UIGestureRecognizer.State in Swift 4        if (sender.state == UIGestureRecognizer.State.began) {            startLocation = sender.location(in: self.view)        }        else if (sender.state == UIGestureRecognizer.State.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 that helps all you Swift pioneers


For those of us using Xamarin:

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);    }}