Preciso usar furto para reconhecer o gesto de furto para baixo e para a direita. Mas no rápido UISwipeGestureRecognizer tem direção correta predeterminada .. E eu não sei como fazer isso para usar outras direções ..
131
Você precisa ter um UISwipeGestureRecognizer
para cada direção. É um pouco estranho, porque a UISwipeGestureRecognizer.direction
propriedade é uma máscara de bits no estilo de opções, mas cada reconhecedor pode lidar apenas com uma direção. Você pode enviá-los todos para o mesmo manipulador, se desejar, e classificá-los, ou enviá-los para diferentes manipuladores. Aqui está uma implementação:
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
na frente do.Down
ect. Apenas usandoswipeDown.direction = .Down
se for suficiente. Apenas uma dica =)swipe.direction = [.Right,.Down,.Up,.Left]
), o reconhecedor nem será chamado, talvez esse seja um problema do swift, mas a partir de agora não funciona.Eu apenas queria contribuir com isso, parece mais elegante no final:
fonte
self.addGestureRecognizer(gesture)
causou um erro para mim. O que foi consertadoself.view.addGestureRecognizer(gesture);
.UIView
subclasse, mas você está absolutamente certo se estiver em umUIViewController
!No storyboard:
Do seu viewController:
fonte
Parece que as coisas mudaram recentemente. No XCode 7.2, a seguinte abordagem funciona:
Testado no Simulator no iOS 8.4 e 9.2 e no dispositivo real no 9.2.
Ou, usando a útil extensão do mlcollard aqui :
fonte
[UISwipeGestureRecognizerDirection.right, .left, .up, .down]
Apple Swift versão 3.1 - Xcode versão 8.3 (8E162)
A maneira prática da abordagem de Alexandre Cassagne
fonte
defaults write com.apple.dt.xcode IDEPlaygroundDisableSimulatorAlternateFramebuffer -bool YES
Terminal para corrigir um bug em algum hardware. Deve ser corrigido em uma nova versão do XcodeNo Swift 4.2 e no Xcode 9.4.1
Adicione delegado de animação, CAAnimationDelegate à sua turma
Se você deseja remover o gesto da vista, use este código
Ex:
Chame essa função como
Assim, você pode escrever as direções restantes e tenha cuidado, se você tem a visualização de rolagem ou não de baixo para cima e vice-versa
Se você tiver a visualização de rolagem, haverá conflito de cima para baixo e exibirá os gestos.
fonte
UISwipeGestureRecognizer
possui umadirection
propriedade que possui a seguinte definição:O problema com o Swift 3.0.1 (e abaixo) é que, mesmo se estiver em
UISwipeGestureRecognizerDirection
conformidadeOptionSet
, o seguinte snippet será compilado, mas não produzirá nenhum resultado esperado positivo:Como solução alternativa, você precisará criar um
UISwipeGestureRecognizer
para cada desejadodirection
.O seguinte código do Playground mostra como implementar vários
UISwipeGestureRecognizer
para o mesmoUIView
e o mesmoselector
usando omap
método Array :fonte
UISwipeGestureRecognizerDirection(rawValue: 15)
Deslize o dedo para a visualização desejada ou visualize a visualização inteira do controlador no Swift 5 e XCode 11 com base no @Alexandre Cassagne
fonte
Deslize o dedo no Swift 5
fonte
Primeiro crie um
baseViewController
e adicioneviewDidLoad
este código "swift4":E use esta
baseController
classe:fonte
No Swift 5,
fonte
Apenas uma sintaxe rápida e mais fria para a resposta de Nate:
fonte
Fácil. Basta seguir o código abaixo e aproveitar.
fonte
Para o Swift 5 , é atualizado
fonte
Depois de cavar um pouco:
A maneira mais curta de adicionar furtos para todas as quatro direções é:
fonte
Isso pode ser feito simplesmente declarando uma função que manipulará todas as suas instruções UISwipeGestureRecognizer de furto. Aqui está o meu código:
Aqui está a função que manipulará a funcionalidade swipedirection:
fonte
Assim: ( Swift 4.2.1 )
fonte