Vous devez en avoir un UISwipeGestureRecognizer
pour chaque direction. C'est un peu bizarre car la UISwipeGestureRecognizer.direction
propriété est un masque de bits de style options, mais chaque module de reconnaissance ne peut gérer qu'une seule direction. Vous pouvez les envoyer tous au même gestionnaire si vous le souhaitez, et les trier là-bas, ou les envoyer à différents gestionnaires. Voici une implémentation:
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
devant.Down
ect. Juste utiliserswipeDown.direction = .Down
si cela est suffisant. Juste un conseil =)swipe.direction = [.Right,.Down,.Up,.Left]
), le module de reconnaissance ne sera même pas appelé, c'est peut-être un problème avec swift, mais pour le moment, cela ne fonctionne pas.J'avais juste envie de contribuer, ça a l'air plus élégant à la fin:
la source
self.addGestureRecognizer(gesture)
a causé une erreur pour moi. Ce qui a corrigé c'étaitself.view.addGestureRecognizer(gesture);
.UIView
sous - classe, mais vous avez absolument raison si vous êtes dans unUIViewController
!À partir du storyboard:
De votre vueContrôleur:
la source
On dirait que les choses ont changé ces derniers temps. Dans XCode 7.2, l'approche suivante fonctionne:
Testé dans Simulator sur iOS 8.4 et 9.2 et sur un appareil réel sur 9.2.
Ou, en utilisant l' extension pratique de mlcollard ici :
la source
[UISwipeGestureRecognizerDirection.right, .left, .up, .down]
Apple Swift version 3.1 - Xcode version 8.3 (8E162)
Le moyen pratique de l'approche d' Alexandre Cassagne
la source
defaults write com.apple.dt.xcode IDEPlaygroundDisableSimulatorAlternateFramebuffer -bool YES
dans Terminal pour corriger un bogue sur certains matériels. Cela devrait être corrigé dans une nouvelle version de XcodeDans Swift 4.2 et Xcode 9.4.1
Ajouter un délégué d'animation, CAAnimationDelegate à votre classe
Si vous souhaitez supprimer le geste de la vue, utilisez ce code
Ex:
Appelez cette fonction comme
Comme ça, vous pouvez écrire les directions restantes et faites attention si vous avez une vue de défilement ou non de bas en haut et vice versa
Si vous avez une vue par défilement, vous obtiendrez un conflit de haut en bas et afficherez les gestes versa.
la source
UISwipeGestureRecognizer
a unedirection
propriété qui a la définition suivante:Le problème avec Swift 3.0.1 (et inférieur) est que même s'il
UISwipeGestureRecognizerDirection
est conforme àOptionSet
, l'extrait de code suivant sera compilé mais ne produira aucun résultat attendu positif:Pour contourner ce problème, vous devrez créer un
UISwipeGestureRecognizer
pour chaque fichier souhaitédirection
.Le code Playground suivant montre comment implémenter plusieurs
UISwipeGestureRecognizer
pour le mêmeUIView
et le même enselector
utilisant lamap
méthode de Array :la source
UISwipeGestureRecognizerDirection(rawValue: 15)
Faites glisser le geste vers la vue souhaitée ou la vue entière du contrôleur de vue dans Swift 5 et XCode 11 basé sur @Alexandre Cassagne
la source
Geste de balayage dans Swift 5
la source
Commencez par créer un
baseViewController
et ajoutezviewDidLoad
ce code "swift4":Et utilisez cette
baseController
classe:la source
Dans Swift 5,
la source
Juste une syntaxe plus rapide et plus cool pour la réponse de Nate:
la source
Facile. Suivez simplement le code ci-dessous et profitez-en.
la source
Après avoir fouillé pendant un moment:
Le moyen le plus court d' ajouter des balayages pour les 4 directions est:
la source
Cela peut être fait en déclarant simplement une fonction qui gérera toutes vos directions de balayage UISwipeGestureRecognizer. Voici mon code:
Voici la fonction qui gérera la fonctionnalité de swipedirection:
la source
Juste comme ça: ( Swift 4.2.1 )
la source
Pour Swift 5, il est mis à jour
la source