web-dev-qa-db-fra.com

Quelle est la différence entre Panoramique et balayage dans iOS?

Cela semble simple .. maintenez le Trackpad, déplacez le doigt, relâchez ..

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

Pan est reconnu par la séquence ci-dessus à la place.

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

Si pan est commenté, glissez est reconnu par le même geste. Avec cela, 2 questions:

  • Quelle est la différence alors entre un pan et un coup?
  • Comment peut-on simuler un balayage sur un simulateur iPhone?
121
JAM

Par définition, un geste de balayage est nécessairement aussi un geste de panoramique - les deux impliquent un mouvement de translation des points de contact. La différence réside dans la sémantique de la reconnaissance: une reconnaissance de panoramique recherche le début du mouvement de translation et continue de signaler le mouvement dans n'importe quelle direction au fil du temps, tandis qu'une reconnaissance de balayage prend une décision instantanée indiquant si les contacts de l'utilisateur se déplacent linéairement dans la direction requise.

Par défaut, deux systèmes de reconnaissance ne reconnaissent pas le même geste. Il existe donc un conflit entre le panoramique et le balayage. Très probablement, votre identificateur de panoramique "gagne" le conflit parce que son geste est plus simple/plus général: un balayage est un panoramique, mais un panoramique ne peut pas être un balayage. Le panoramique est donc reconnu en premier et exclut les autres.

Vous devriez pouvoir résoudre ce conflit en utilisant la méthode déléguée gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:, ou peut-être sans délégation en faisant en sorte que la reconnaissance de panoramique dépende de la reconnaissance de balayage avec requireGestureRecognizerToFail:.

Une fois le conflit résolu, vous devriez pouvoir simuler un glissement d'un doigt en faisant glisser rapidement la souris. (Bien que la souris soit plus précise que votre doigt, elle est un peu plus complexe que de faire la chose réelle sur un périphérique.) Vous pouvez effectuer un panoramique/balayage à deux doigts en maintenant les touches Option et Maj enfoncées.

224
rickster

Glisser le geste fonctionne lorsque vous faites glisser votre doigt uniquement dans certaines directions (glisser vers le haut, vers le bas, vers la gauche, vers la droite). Par exemple, les cellules balayables dans le contrôleur de vue de table.

Le geste panoramique fonctionnera si vous faites glisser votre doigt dans n’importe quelle direction. Vous pouvez lui donner une accélération ou une décélération. Par exemple, déplacer un objet d'un endroit à un autre ou faire tourner une roulette.

27
Daya Kevin

Selon le Apple. Apple UIPanGestureRecognizer La différence entre un panoramique et un balayage comme ci-dessous: -

UIPanGestureRecognizer est une sous-classe concrète de UIGestureRecognizer qui recherche un panoramique (glisser). gestes. L'utilisateur doit appuyer sur un ou plusieurs doigts d'une vue pendant qu'il effectue un panoramique. Les clients implémentant la méthode d'action pour cette reconnaissance de geste peuvent lui demander la traduction en cours et la vitesse du geste.

Un geste panoramique est continu. Il commence ( a commencé ) lorsque le nombre minimum de doigts autorisé ( minimumNumberOfTouches ) a bougé suffisamment pour être considéré comme un pan. Cela change (change) lorsqu'un doigt bouge alors qu'au moins le nombre minimum de doigts est enfoncé. Il se termine ( se termine ) lorsque tous les doigts sont levés.

Les clients de cette classe peuvent, dans leurs méthodes d'action, interroger l'objet UIPanGestureRecognizer pour connaître la traduction en cours du geste ( translation (in:) ) et la vélocité. de la traduction ( vélocité (en:) ). Ils peuvent spécifier la vue dont le système de coordonnées doit être utilisé pour les valeurs de translation et de vélocité. Les clients peuvent également réinitialiser la traduction à une valeur souhaitée.

Exemple de démonstration de Swift 3 UIPanGestureRecognizer: - lien de ressource

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

Selon le Apple. Apple UITapGestureRecognizer

UITapGestureRecognizer est une sous-classe concrète de UIGestureRecognizer qui recherche des taps simples ou multiples. . Pour que le geste soit reconnu, le nombre de doigts spécifié doit taper sur la vue un nombre de fois spécifié.

Bien que les taps soient des gestes discrets, ils le sont pour chaque état de la reconnaissance de geste; ainsi, le message d'action associé est envoyé lorsque le geste commence et est envoyé pour chaque état intermédiaire jusqu'à (et y compris) l'état final du geste. Le code qui gère les gestes de prise doit donc tester l’état du geste.

Exemple de démonstration de Swift 3 UITapGestureRecognizer Lien de ressource

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

Exemple d'image pour Recognizer enter image description here

0
Rex

Selon http://hammerjs.github.io/ , je pense que la différence est la suivante:

  • pan: déplacez les directions dans la même vue agrandie
  • glisser: basculer entre plusieurs vues

Le geste est le même, les deux utilisent un doigt et bougent.

0
JasmineOT