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