Was ist der Unterschied zwischen Pan und Swipe in iOS?


129

Klingt einfach. Halten Sie das Trackpad gedrückt, bewegen Sie den Finger, lassen Sie es los . Aber irgendwie wird kein Wischen ausgelöst (stattdessen wird das Schwenken ausgelöst).

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

Pan wird stattdessen durch die obige Sequenz erkannt.

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

Wenn Pan kommentiert wird, wird Swipe durch dieselbe Geste erkannt. Damit 2 Fragen:

  • Was ist dann der Unterschied zwischen einer Pfanne und einem Schlag?
  • Wie kann man einen Swipe auf dem iPhone Simulator simulieren?

1
@rickster, korrigiere mich, wenn ich falsch liege, aber das Streichen verwendet vier Richtungen: Auf, Ab, Links, Rechts und Schwenken kann eine beliebige Richtung sein. Richtig
Victor Engel

Antworten:


231

Per Definition ist eine Wischgeste notwendigerweise auch eine Schwenkgeste - beide beinhalten eine translatorische Bewegung von Berührungspunkten. Der Unterschied liegt in der Semantik des Erkenners: Ein Pan-Erkenner sucht nach dem Beginn der Translationsbewegung und meldet weiterhin Bewegungen in jede Richtung über die Zeit, während ein Wischerkenner sofort entscheidet, ob sich die Berührungen des Benutzers linear in die gewünschte Richtung bewegen.

Standardmäßig erkennen keine zwei Erkenner dieselbe Geste, sodass ein Konflikt zwischen Schwenken und Streichen besteht. Höchstwahrscheinlich "gewinnt" Ihr Pan-Erkenner den Konflikt, weil seine Geste einfacher / allgemeiner ist: Ein Swipe ist ein Pan, aber ein Pan ist möglicherweise kein Swipe, sodass der Pan zuerst erkennt und andere Erkenner ausschließt.

Sie sollten in der Lage sein, diesen Konflikt mithilfe der Delegate-Methode gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:oder möglicherweise ohne Delegierung zu lösen , indem Sie den Pan-Erkenner vom Swipe-Erkenner mit abhängig machen requireGestureRecognizerToFail:.

Wenn der Konflikt gelöst ist, sollten Sie in der Lage sein, einen Ein-Finger-Schlag durch schnelles Ziehen der Maus zu simulieren. (Da die Maus präziser als Ihr Finger ist, ist sie etwas kniffliger als die eigentliche Ausführung auf einem Gerät.) Das Schwenken / Wischen mit zwei Fingern kann durch Halten der Wahltaste und der Umschalttaste erfolgen.


24
Gute Antwort. Aber ich denke nicht, dass die Schwenkgeste gewinnt, weil sie allgemeiner ist, sondern weil es sich um eine kontinuierliche Geste handelt (wobei ein Wischen eine diskrete Geste ist), sodass ein Schwenken vor einem Wischen erkannt wird. Das Wischen wird nur am angehobenen Finger erkannt, die Pfanne wird fast unmittelbar nach dem Beginn der Bewegung des Fingers erkannt. Swipe vs. Pan wird im Event-PG unter "Festlegen einer bestimmten Reihenfolge für zwei Gestenerkenner" ausführlich behandelt.
Nevan King

27

Die Wischgeste funktioniert, wenn Sie Ihren Finger nur in bestimmte Richtungen ziehen (nach oben wischen, nach unten wischen, nach links wischen, nach rechts wischen). Zum Beispiel wischbare Zellen in der Tabellenansicht.

Die Schwenkgeste funktioniert, wenn Sie Ihren Finger in eine beliebige Richtung ziehen. Sie können es beschleunigen oder verlangsamen. Zum Beispiel, wenn Sie ein Objekt von einem Ort an einen anderen bewegen oder einen Spinner drehen.


3

Gemäß dem Apfeldokument. Apple UIPanGestureRecognizer Der Unterschied zwischen einer Pfanne und einem Wisch wie folgt : -

UIPanGestureRecognizer ist eine konkrete Unterklasse von UIGestureRecognizer , die nach Schwenkgesten (Ziehen) sucht. Der Benutzer muss einen oder mehrere Finger auf eine Ansicht drücken, während er sie schwenkt. Clients, die die Aktionsmethode für diesen Gestenerkenner implementieren, können ihn nach der aktuellen Übersetzung und Geschwindigkeit der Geste fragen.

Eine Schwenkgeste ist kontinuierlich. Es beginnt ( begann ), wenn sich die minimal zulässige Anzahl von Fingern ( MinimumNumberOfTouches ) genug bewegt hat, um als Pfanne betrachtet zu werden. Es ändert sich, wenn sich ein Finger bewegt, während mindestens die Mindestanzahl von Fingern gedrückt wird. Es endet ( endet ), wenn alle Finger angehoben werden.

Clients dieser Klasse können in ihren Aktionsmethoden das UIPanGestureRecognizer-Objekt nach der aktuellen Übersetzung der Geste ( Übersetzung (in :) ) und der Geschwindigkeit der Übersetzung ( Geschwindigkeit (in :) ) abfragen . Sie können die Ansicht angeben, deren Koordinatensystem für die Translations- und Geschwindigkeitswerte verwendet werden soll. Clients können die Übersetzung auch auf einen gewünschten Wert zurücksetzen.

Swift 3 UIPanGestureRecognizer-Demo Beispiel: - Ressourcenverknüpfung

import UIKit

class ViewController: UIViewController {
// this records our circle's center for use as an offset while dragging
var circleCenter: CGPoint!

override func viewDidLoad() {
    super.viewDidLoad()

    // Add a draggable view
    let circle = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0))
    circle.center = self.view.center
    circle.layer.cornerRadius = 50.0
    circle.backgroundColor = UIColor.green()

    // add pan gesture recognizer to
    circle.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.dragCircle)))

    self.view.addSubview(circle)
}

func dragCircle(gesture: UIPanGestureRecognizer) {
    let target = gesture.view!

    switch gesture.state {
    case .began, .ended:
        circleCenter = target.center
    case .changed:
        let translation = gesture.translation(in: self.view)
        target.center = CGPoint(x: circleCenter!.x + translation.x, y: circleCenter!.y + translation.y)
    default: break
    }
  }
}

Gemäß dem Apfeldokument. Apple UITapGestureRecognizer

UITapGestureRecognizer ist eine konkrete Unterklasse von UIGestureRecognizer , die nach einzelnen oder mehreren Abgriffen sucht. Damit die Geste erkannt wird, muss die angegebene Anzahl von Fingern mehrmals auf die Ansicht tippen.

Obwohl Taps diskrete Gesten sind, sind sie für jeden Zustand des Gestenerkenners diskret. Somit wird die zugehörige Aktionsnachricht gesendet, wenn die Geste beginnt, und wird für jeden Zwischenzustand bis (und einschließlich) dem Endzustand der Geste gesendet. Code, der Tap-Gesten verarbeitet, sollte daher den Status der Geste testen.

Swift 3 UITapGestureRecognizer Demo Beispiel Resource Link

override func viewDidLoad() {
   super.viewDidLoad()

   let tap = UITapGestureRecognizer(target: self, action: #selector(doubleTapped))
   tap.numberOfTapsRequired = 2
   view.addGestureRecognizer(tap)
}
func doubleTapped() {
     // do something cool here
     print("Test TapGesture")
}

Beispielbild für RecognizerGeben Sie hier die Bildbeschreibung ein


Die Frage betrifft den Unterschied zwischen Schwenk- und Wischaktionen und wie man sie auf einem iPhone-Simulator unterscheidet. Diese Antwort behandelt keines dieser Probleme, da weder Wischgesten noch iPhone-Simulatoren erwähnt werden.
Vince O'Sullivan

@ VinceO'Sullivan Ich werde versuchen, die Definition von Pan und Swipe zu erklären. Ich hoffe, das wird es verständlich machen, zwischen beiden zu unterscheiden.
Rex

Der ursprüngliche Beitrag ist fünf Jahre alt und hat eine akzeptierte Antwort (die auch ungefähr 200 Stimmen hat). Ich denke nicht, dass Sie etwas Nützliches hinzufügen können (es sei denn, es gibt Unterschiede zwischen der Funktionsweise der Dinge und der Funktionsweise in der akzeptierten Antwort).
Vince O'Sullivan

@ VinceO'Sullivan Ich erkläre es auf einfache Weise mit einem einfachen Beispiel und der Definition von Apple-Dokumenten. Ich denke, es konzentriert sich mehr auf das Thema und das Bild zeigt das Berührungsmuster in iOS.
Rex

0

Laut http://hammerjs.github.io/ ist der Unterschied meiner Meinung nach:

  • Schwenken: Verschieben Sie die Richtungen in derselben großen Ansicht
  • Wischen: Wechseln Sie zwischen mehreren Ansichten

Die Geste ist dieselbe, beide benutzen einen Finger und bewegen sich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.