Вам необходимо иметь по одному UISwipeGestureRecognizer
на каждое направление. Это немного странно, потому что UISwipeGestureRecognizer.direction
свойство представляет собой битовую маску в стиле параметров, но каждый распознаватель может обрабатывать только одно направление. Вы можете отправить их все одному обработчику, если хотите, и отсортировать их там, или отправить их разным обработчикам. Вот одна реализация:
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
}
}
}
Свифт 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
перед.Down
ect. Просто использую,swipeDown.direction = .Down
если достаточно. Просто совет =)swipe.direction = [.Right,.Down,.Up,.Left]
), распознаватель даже не будет вызван, возможно, это проблема с swift, но на данный момент не работает.Мне просто захотелось внести свой вклад, в итоге выглядит более элегантно:
источник
self.addGestureRecognizer(gesture)
вызвал для меня ошибку. Что исправлено былоself.view.addGestureRecognizer(gesture);
.UIView
подклассе, но вы абсолютно правы, если используетеUIViewController
!Из раскадровки:
Из вашего viewController:
источник
Похоже, что за последнее время все изменилось. В XCode 7.2 работает следующий подход:
Протестировано в Simulator на iOS 8.4 и 9.2 и на реальном устройстве на 9.2.
Или, используя удобное расширение mlcollard здесь :
источник
[UISwipeGestureRecognizerDirection.right, .left, .up, .down]
Apple Swift версии 3.1 - Xcode версии 8.3 (8E162)
Удобный способ из подхода Александра Кассаня
источник
defaults write com.apple.dt.xcode IDEPlaygroundDisableSimulatorAlternateFramebuffer -bool YES
в Терминале, чтобы исправить ошибку на некотором оборудовании. Это должно быть исправлено в новой версии XcodeВ Swift 4.2 и Xcode 9.4.1
Добавьте делегата анимации CAAnimationDelegate в свой класс
Если вы хотите удалить жест из представления, используйте этот код
Пример:
Вызовите эту функцию как
Таким образом вы можете написать оставшиеся направления и, пожалуйста, будьте осторожны, есть ли у вас режим прокрутки или нет снизу вверх и наоборот.
Если у вас есть режим прокрутки, вы получите конфликт при просмотре сверху вниз и обратных жестах.
источник
UISwipeGestureRecognizer
имеетdirection
свойство, имеющее следующее определение:Проблема со Swift 3.0.1 (и ниже) заключается в том, что даже если он
UISwipeGestureRecognizerDirection
соответствуетOptionSet
, следующий фрагмент будет компилироваться, но не даст положительного ожидаемого результата:В качестве обходного пути вам нужно будет создать
UISwipeGestureRecognizer
для каждого желаемогоdirection
.Следующий код игровой площадки показывает, как реализовать несколько
UISwipeGestureRecognizer
одинаковыхUIView
и одинаковыхselector
с помощьюmap
метода Array :источник
UISwipeGestureRecognizerDirection(rawValue: 15)
Проведите жестом по экрану, который вы хотите, или viewcontroller полностью в Swift 5 и XCode 11 на основе @Alexandre Cassagne
источник
Жест смахивания в Swift 5
источник
Сначала создайте
baseViewController
и добавьтеviewDidLoad
этот код "swift4":И используйте этот
baseController
класс:источник
В Swift 5
источник
Просто более крутой быстрый синтаксис для ответа Нейта:
источник
Легко. Просто следуйте приведенному ниже коду и наслаждайтесь.
источник
Покопавшись немного:
Самый короткий путь к добавить пойло для всех 4 -й направлений является:
источник
Это можно сделать, просто объявив одну функцию, которая будет обрабатывать все ваши направления UISwipeGestureRecognizer. Вот мой код:
Вот функция, которая будет обрабатывать функциональность смахивания:
источник
Вот так: ( Swift 4.2.1 )
источник
Для Swift 5 обновлено
источник