Jaka jest różnica między Pan a Swipe w systemie iOS?

Brzmi prosto .. przytrzymaj gładzik, przesuń palcem, zwolnij .. Ale jakoś swipe nie jest wyzwalany (zamiast tego Pan jest wyzwalany)

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

Pan jest rozpoznawany przez powyższą sekwencję.

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

Jeśli pan jest komentowany, przesunięcie jest rozpoznawane przez ten sam gest .. Z tym 2 pytania:

  • Jaka jest więc różnica między pan a machnięciem?
  • Jak można symulować machnięcie na iPhonie symulator?
Author: James Raitsev, 2012-03-27

4 answers

Z definicji gest machnięcia jest również gestem przesuwania-oba dotyczą translacyjnego ruchu punktów dotyku. Różnica polega na semantyce rozpoznawania: rozpoznawacz pan szuka początku ruchu translacyjnego i nadal zgłasza ruch w dowolnym kierunku w czasie, podczas gdy rozpoznawacz machnięcia podejmuje natychmiastową decyzję, czy dotknięcia użytkownika poruszają się liniowo w wymaganym kierunku.

Domyślnie żadne dwa rozpoznawacze nie rozpoznają ten sam gest, więc jest konflikt między pan i swipe. Najprawdopodobniej twój rozpoznawacz patelni "wygrywa" konflikt, ponieważ jego gest jest prostszy / bardziej ogólny: machnięcie to patelnia, ale patelnia może nie być machnięciem, więc patelnia rozpoznaje pierwszy i wyklucza inne rozpoznawanie.

Powinieneś być w stanie rozwiązać ten konflikt za pomocą metody delegate gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:, lub być może bez delegacji, poprzez uzależnienie rozpoznawania pan od rozpoznawania machnięcia za pomocą requireGestureRecognizerToFail:.

Po rozwiązaniu konfliktu, ty powinien być w stanie symulować przesunięcie jednym palcem, szybko przeciągając mysz. (Chociaż mysz jest bardziej precyzyjna niż palec, jest nieco bardziej wybredna niż robienie prawdziwych rzeczy na urządzeniu.) Przesuwanie / przesuwanie dwoma palcami można wykonać, przytrzymując klawisze Option I Shift.

 235
Author: rickster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-27 23:45:43

Gest przesunięcia będzie działać, gdy przeciągniesz palcem tylko w określonych kierunkach (przesuń palcem w górę,przesuń palcem w dół,przesuń palcem w lewo, przesuń palcem w prawo). Na przykład komórki z możliwością przesuwania w kontrolerze widoku tabeli.

Gest Pan będzie działać, gdy przeciągniesz palcem w dowolnych kierunkach. Możesz dać przyspieszenie lub spowolnienie do niego. Na przykład przenoszenie obiektu z jednego miejsca do drugiego lub obracanie spinnera..

 27
Author: Daya Kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-13 04:35:47

Zgodnie z dokumentem apple. Apple UIPanGestureRecognizer Na różnica między patelnią a machnięciem jak poniżej: -

Uipangesturerecognizer to konkretna podklasa UIGestureRecognizer , która szuka gestów przesuwania (przeciągania). Użytkownik musi naciskać jeden lub więcej palców na widok podczas przesuwania go. Klienci implementujący metodę działania dla tego rozpoznawania gestów mogą poprosić go o bieżące tłumaczenie i prędkość gest.

Gest przesuwania jest ciągły. Zaczyna się (zaczyna się ), gdy minimalna liczba dozwolonych palców (minimumNumberOfTouches ) przesunęła się na tyle, aby można ją było uznać za patelnię. Zmienia się (zmienia), gdy palec porusza się, podczas gdy przynajmniej minimalna liczba palców jest wciśnięta. Kończy się ( zakończone ), gdy wszystkie palce są uniesione.

Klienci tej klasy mogą w swoich metodach akcji odpytywać obiekt UIPanGestureRecognizer o bieżące tłumaczenie gest (translation (in:) ) oraz prędkość tłumaczenia (velocity(in:) ). Mogą one określać widok, którego układ współrzędnych powinien być używany dla wartości translacji i prędkości. Klienci mogą również zresetować tłumaczenie do żądanej wartości.

Swift 3 UIPanGestureRecognizer Przykład Demo:- Resource Link

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

Zgodnie z dokumentem apple. Apple UITapGestureRecognizer

UITapGestureRecognizer jest betonowa podklasa UIGestureRecognizer , która szuka pojedynczych lub wielu kranów. Aby gest został rozpoznany, określona liczba palców musi stuknąć widok określoną liczbę razy.

Chociaż dotknięcia są dyskretnymi gestami, są dyskretne dla każdego stanu rozpoznawania gestów; zatem powiązana wiadomość akcji jest wysyłana, gdy gest się rozpoczyna i jest wysyłana dla każdego stanu pośredniego do (włącznie) stanu końcowego gestu. Kod, który obsługuje tap gesty powinny zatem sprawdzać stan gestu.

Swift 3 Uitapgesturerecognizer Przykład Demo 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")
}

Przykładowy obrazek do rozpoznawaniaTutaj wpisz opis obrazka

 2
Author: Rex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-14 11:25:12

Zgodnie z http://hammerjs.github.io / , myślę, że różnica jest taka:

  • pan: przesuń kierunki w tym samym dużym widoku
  • swipe: przełączanie między kilkoma widokami

Gest jest taki sam, zarówno jednym palcem, jak i ruchem.

 0
Author: JasmineOT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 21:30:43