Necesitas tener uno UISwipeGestureRecognizer
para cada dirección. Es un poco extraño porque la UISwipeGestureRecognizer.direction
propiedad es una máscara de bits de estilo de opciones, pero cada reconocedor solo puede manejar una dirección. Puede enviarlos todos al mismo controlador si lo desea, y ordenarlos por ahí, o enviarlos a diferentes controladores. Aquí hay una implementación:
override func viewDidLoad() {
super.viewDidLoad()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture))
swipeRight.direction = .right
self.view.addGestureRecognizer(swipeRight)
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture))
swipeDown.direction = .down
self.view.addGestureRecognizer(swipeDown)
}
@objc func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case .right:
print("Swiped right")
case .down:
print("Swiped down")
case .left:
print("Swiped left")
case .up:
print("Swiped up")
default:
break
}
}
}
Swift 3:
override func viewDidLoad() {
super.viewDidLoad()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeRight.direction = UISwipeGestureRecognizerDirection.right
self.view.addGestureRecognizer(swipeRight)
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeDown.direction = UISwipeGestureRecognizerDirection.down
self.view.addGestureRecognizer(swipeDown)
}
func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case UISwipeGestureRecognizerDirection.right:
print("Swiped right")
case UISwipeGestureRecognizerDirection.down:
print("Swiped down")
case UISwipeGestureRecognizerDirection.left:
print("Swiped left")
case UISwipeGestureRecognizerDirection.up:
print("Swiped up")
default:
break
}
}
}
UISwipeGestureRecognizerDirection
delante de.Down
ect. Solo usoswipeDown.direction = .Down
si es suficiente. Solo un consejo =)swipe.direction = [.Right,.Down,.Up,.Left]
), ni siquiera se llamará al reconocedor, tal vez este es un problema con swift, pero a partir de ahora no funciona.Simplemente tenía ganas de contribuir con esto, al final se ve más elegante:
fuente
self.addGestureRecognizer(gesture)
me causó un error Lo que solucionó fueself.view.addGestureRecognizer(gesture);
.UIView
subclase, ¡pero tienes toda la razón si estás en unaUIViewController
!Desde el guión gráfico:
Desde su viewController:
fuente
Parece que las cosas han cambiado últimamente. En XCode 7.2 funciona el siguiente enfoque:
Probado en Simulator en iOS 8.4 y 9.2 y en dispositivo real en 9.2.
O, usando la práctica extensión de mlcollard aquí :
fuente
[UISwipeGestureRecognizerDirection.right, .left, .up, .down]
Apple Swift versión 3.1 - Xcode versión 8.3 (8E162)
El camino práctico desde el enfoque de Alexandre Cassagne
fuente
defaults write com.apple.dt.xcode IDEPlaygroundDisableSimulatorAlternateFramebuffer -bool YES
en la Terminal para corregir un error en algún hardware. Debería arreglarse en una nueva versión de XcodeEn Swift 4.2 y Xcode 9.4.1
Agregue Delegado de animación, CAAnimationDelegate a su clase
Si desea eliminar el gesto de la vista, use este código
Ex:
Llama a esta función como
De esta manera, puede escribir las instrucciones restantes y tenga cuidado si tiene vista de desplazamiento o no de abajo hacia arriba y viceversa
Si tiene una vista de desplazamiento, obtendrá conflictos de arriba a abajo y verá gestos versa.
fuente
UISwipeGestureRecognizer
tiene unadirection
propiedad que tiene la siguiente definición:El problema con Swift 3.0.1 (y a continuación) es que, incluso si se
UISwipeGestureRecognizerDirection
ajusta aOptionSet
, el siguiente fragmento se compilará pero no producirá ningún resultado positivo esperado:Como solución alternativa, deberá crear un
UISwipeGestureRecognizer
para cada deseadodirection
.El siguiente código de Playground muestra cómo implementar varios
UISwipeGestureRecognizer
para lo mismoUIView
y lo mismoselector
usando elmap
método de Array :fuente
UISwipeGestureRecognizerDirection(rawValue: 15)
Deslice el gesto hacia la vista que desea, o vea la vista completa del controlador en Swift 5 y XCode 11 basado en @Alexandre Cassagne
fuente
Deslizar gesto en Swift 5
fuente
Primero cree un
baseViewController
y agregueviewDidLoad
este código "swift4":Y usa esta
baseController
clase:fuente
En Swift 5,
fuente
Solo una sintaxis rápida más fresca para la respuesta de Nate:
fuente
Fácil. Simplemente siga el código a continuación y disfrute.
fuente
Para Swift 5 se actualiza
fuente
Después de excavar por un tiempo:
La forma más corta de agregar deslizamientos para las 4 direcciones es:
fuente
Se puede hacer simplemente declarando una función que se encargará de todas las direcciones de deslizamiento UISwipeGestureRecognizer. Aquí está mi código:
Aquí está la función que administrará la funcionalidad de dirección de desplazamiento:
fuente
Solo así: ( Swift 4.2.1 )
fuente