notability - ¿Cuál es la diferencia entre Pan y Swipe en iOS?
ios 12 iphone 6 (4)
Según el documento de la manzana. Apple UIPanGestureRecognizer La diferencia entre una panorámica y un deslizamiento como a continuación: -
UIPanGestureRecognizer es una subclase concreta de UIGestureRecognizer que busca gestos de panoramización (arrastre). El usuario debe presionar uno o más dedos en una vista mientras lo desplaza. Los clientes que implementan el método de acción para este reconocedor de gestos pueden solicitar la traducción actual y la velocidad del gesto.
Un gesto de panorámica es continuo. Comienza ( comienza ) cuando la cantidad mínima de dedos permitidos ( minimumNumberOfTouches ) se ha movido lo suficiente como para considerarse una bandeja. Cambia (cambia) cuando un dedo se mueve mientras se presiona al menos la cantidad mínima de dedos. Termina ( termina ) cuando se levantan todos los dedos.
Los clientes de esta clase pueden, en sus métodos de acción, consultar el objeto UIPanGestureRecognizer para la traducción actual del gesto ( traducción (en :) ) y la velocidad de la traducción ( velocidad (en :) ). Pueden especificar la vista cuyo sistema de coordenadas se debe usar para los valores de velocidad y de traducción. Los clientes también pueden restablecer la traducción a un valor deseado.
Ejemplo de demostración de Swift 3 UIPanGestureRecognizer: - Enlace de recursos
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
}
}
}
Según el documento de la manzana. Apple UITapGestureRecognizer
UITapGestureRecognizer es una subclase concreta de UIGestureRecognizer que busca grifos únicos o múltiples. Para que se reconozca el gesto, el número especificado de dedos debe tocar la vista un número específico de veces.
Aunque los toques son gestos discretos, son discretos para cada estado del reconocedor de gestos; por lo tanto, el mensaje de acción asociado se envía cuando el gesto comienza y se envía para cada estado intermedio hasta (e incluyendo) el estado final del gesto. El código que maneja los gestos de toque debería, por lo tanto, probar el estado del gesto.
Swift 3 UITapGestureRecognizer Ejemplo de demostración Enlace de recursos
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")
}
Suena simple ... Sostenga el Trackpad, mueva el dedo, suelte .. Pero de alguna manera, el deslizamiento no se está disparando (se activa la sartén)
UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc]
initWithTarget:v action:@selector(handleSwipe:)];
swipeGesture.direction= UISwipeGestureRecognizerDirectionUp;
[v addGestureRecognizer:swipeGesture];
Pan es reconocido por la secuencia anterior en su lugar.
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]
initWithTarget:v action:@selector(handlePan:)];
[v addGestureRecognizer: panGesture];
Si se comenta pan, se reconoce el deslizamiento con el mismo gesto. Con esto, 2 preguntas:
- ¿Cuál es la diferencia entre una panorámica y un deslizamiento?
- ¿Cómo se puede simular un deslizamiento en el simulador de iPhone?
De acuerdo con http://hammerjs.github.io/ , creo que la diferencia es:
- pan: mover direcciones en la misma gran vista
- deslizar: cambiar entre varias vistas
El gesto es el mismo, ambos usan un dedo y se mueven.
Por definición, un gesto de deslizamiento es necesariamente también un gesto panorámico: ambos implican un movimiento traslacional de puntos táctiles. La diferencia radica en la semántica del reconocedor: un reconocedor de panoramización busca el inicio del movimiento de traslación y continúa informando el movimiento en cualquier dirección a lo largo del tiempo, mientras que un reconocedor de barrido toma una decisión instantánea sobre si los toques del usuario se movieron linealmente en la dirección requerida.
De manera predeterminada, no hay dos reconocedores que reconozcan el mismo gesto, por lo que hay un conflicto entre pan y deslizamiento. Lo más probable es que su reconocedor panorámico "gane" el conflicto porque su gesto es más simple / más general: un deslizamiento es una panoramización pero una panoramización no puede deslizarse, por lo que la panoramización se reconoce primero y excluye otros reconocedores.
Debería poder resolver este conflicto utilizando el método de delegado gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
o quizás sin delegación haciendo que el reconocedor de panorámica dependa del reconocedor de requireGestureRecognizerToFail:
con requireGestureRecognizerToFail:
Una vez resuelto el conflicto, debería poder simular un deslizamiento con un dedo arrastrando el mouse rápidamente. (Aunque como el mouse es más preciso que el dedo, es un poco más quisquilloso que hacer lo real en un dispositivo.) Se puede hacer una panorámica / deslizar con dos dedos manteniendo presionadas las teclas Opción y Mayús.
Swipe Gesture funcionará cuando arrastres el dedo solo en ciertas direcciones (desliza hacia arriba, desliza hacia abajo, desliza hacia la izquierda, desliza hacia la derecha). Por ejemplo, celdas deslizables en el controlador de vista de tabla.
Pan Gesture funcionará cuando arrastra su dedo en cualquier dirección. Puedes darle aceleración o desaceleración. Por ejemplo, mover un objeto de un lugar a otro o hacer girar una rueda giratoria.