What is the difference between Pan and Swipe in iOS?

IosGesture RecognitionGestures

Ios Problem Overview


Sounds simple .. Hold the Trackpad, move the finger, release .. But somehow swipe is not being triggered (pan is triggered instead)

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handleSwipe:)];
swipeGesture.direction= UISwipeGestureRecognizerDirectionUp;
[v addGestureRecognizer:swipeGesture];

Pan is recognized by the above sequence instead.

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handlePan:)];
[v addGestureRecognizer: panGesture];

If pan is commented, swipe is recognized by the same gesture .. With this, 2 questions:

  • What is the difference then between a pan and a swipe?
  • How can one simulate a swipe on iPhone simulator?

Ios Solutions


Solution 1 - Ios

By definition, a swipe gesture is necessarily also a pan gesture -- both involve translational movement of touch points. The difference is in the recognizer semantics: a pan recognizer looks for the beginning of translational movement and continues to report movement in any direction over time, while a swipe recognizer makes an instantaneous decision as to whether the user's touches moved linearly in the required direction.

By default, no two recognizers will recognize the same gesture, so there's a conflict between pan and swipe. Most likely, your pan recognizer "wins" the conflict because its gesture is simpler / more general: A swipe is a pan but a pan may not be a swipe, so the pan recognizes first and excludes other recognizers.

You should be able to resolve this conflict using the delegate method gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:, or perhaps without delegation by making the pan recognizer depend on the swipe recognizer with requireGestureRecognizerToFail:.

With the conflict resolved, you should be able to simulate a one-finger swipe by quickly dragging the mouse. (Though as the mouse is more precise than your finger, it's a bit more finicky than doing the real thing on a device.) Two-finger pan/swipe can be done by holding the Option & Shift keys.

Solution 2 - Ios

Swipe Gesture will work when you drag your finger only in certain directions (swipe up,swipe down,swipe left, swipe right). For example swipeable cells in table view controller.

Pan Gesture will work when you drag your finger in any directions. You can give acceleration or deceleration to it. FOr example, moving a object from one place to another place or spinning a spinner..

Solution 3 - Ios

According to http://hammerjs.github.io/, I think the difference is:

  • pan: move directions in the same big view
  • swipe: switch between several views

The gesture is the same, both use one finger and move.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJames RaitsevView Question on Stackoverflow
Solution 1 - IosricksterView Answer on Stackoverflow
Solution 2 - IosDaya KevinView Answer on Stackoverflow
Solution 3 - IosJasmineOTView Answer on Stackoverflow