Sie müssen eine UISwipeGestureRecognizer
für jede Richtung haben. Es ist etwas seltsam, weil die UISwipeGestureRecognizer.direction
Eigenschaft eine Bitmaske im Optionsstil ist, aber jeder Erkenner kann nur eine Richtung verarbeiten. Sie können sie alle an denselben Handler senden, wenn Sie möchten, und sie dort sortieren oder an verschiedene Handler senden. Hier ist eine Implementierung:
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
vor.Down
ect hinzufügen . Nur verwenden,swipeDown.direction = .Down
wenn es ausreicht. Nur ein Tipp =)swipe.direction = [.Right,.Down,.Up,.Left]
), wird der Erkenner nicht einmal aufgerufen. Vielleicht ist dies ein Problem mit Swift, aber ab sofort funktioniert es nicht.Ich wollte nur dazu beitragen, sieht am Ende eleganter aus:
quelle
self.addGestureRecognizer(gesture)
hat einen Fehler für mich verursacht. Was es fixiert warself.view.addGestureRecognizer(gesture);
.UIView
Unterklasse verwendet, aber Sie haben absolut Recht, wenn Sie in einer sindUIViewController
!Aus dem Storyboard:
Aus Ihrer Sicht Controller:
quelle
Es sieht so aus, als hätten sich die Dinge in letzter Zeit geändert. In XCode 7.2 funktioniert der folgende Ansatz:
Getestet in Simulator unter iOS 8.4 und 9.2 und auf dem tatsächlichen Gerät unter 9.2.
Oder mit mlcollard ‚s handlicher Erweiterung hier :
quelle
[UISwipeGestureRecognizerDirection.right, .left, .up, .down]
Apple Swift Version 3.1 - Xcode Version 8.3 (8E162)
Der praktische Weg von Alexandre Cassagnes Ansatz
quelle
defaults write com.apple.dt.xcode IDEPlaygroundDisableSimulatorAlternateFramebuffer -bool YES
im Terminal ausgeführt werden, um einen Fehler auf einer bestimmten Hardware zu beheben. Es sollte in einer neuen Version von XcodeIn Swift 4.2 und Xcode 9.4.1
Fügen Sie Ihrer Klasse den Animationsdelegierten CAAnimationDelegate hinzu
Wenn Sie eine Geste aus der Ansicht entfernen möchten, verwenden Sie diesen Code
Ex:
Nennen Sie diese Funktion wie
Auf diese Weise können Sie die verbleibenden Anweisungen schreiben und bitte vorsichtig sein, ob Sie eine Bildlaufansicht von unten nach oben und umgekehrt haben oder nicht
Wenn Sie eine Bildlaufansicht haben, kommt es zu Konflikten zwischen oben und unten und umgekehrt.
quelle
UISwipeGestureRecognizer
hat einedirection
Eigenschaft mit der folgenden Definition:Das Problem mit Swift 3.0.1 (und darunter) besteht darin, dass das folgende Snippet selbst dann kompiliert wird, wenn es den
UISwipeGestureRecognizerDirection
Anforderungen entsprichtOptionSet
, aber kein positives erwartetes Ergebnis liefert:Um dieses Problem zu umgehen, müssen Sie
UISwipeGestureRecognizer
für jeden gewünschten eine erstellendirection
.Der folgende Spielplatzcode zeigt, wie Sie mit der Array- Methode mehrere
UISwipeGestureRecognizer
für dasselbeUIView
und dasselbe implementieren :selector
map
quelle
UISwipeGestureRecognizerDirection(rawValue: 15)
Wischen Sie mit der Geste zur gewünschten Ansicht oder zur Ansicht des Controllers in Swift 5 & XCode 11 basierend auf @Alexandre Cassagne
quelle
Wischgeste in Swift 5
quelle
Erstellen Sie zuerst einen
baseViewController
und fügen SieviewDidLoad
diesen Code "swift4" hinzu:Und benutze diese
baseController
Klasse:quelle
Nur eine coolere, schnelle Syntax für Nates Antwort:
quelle
Einfach. Folgen Sie einfach dem Code unten und genießen Sie.
quelle
Für Swift 5 ist es aktualisiert
quelle
Nach einer Weile herumgraben:
Der kürzeste Weg , um Wischbewegungen für alle 4 Richtungen hinzuzufügen, ist:
quelle
In Swift 5,
quelle
Dies kann durch einfaches Deklarieren einer Funktion erfolgen, die alle Ihre UISwipeGestureRecognizer-Swipe-Anweisungen verarbeitet. Hier ist mein Code:
Hier ist die Funktion, die die Swipedirection-Funktionalität steuert:
quelle
Einfach so: ( Swift 4.2.1 )
quelle