O que gestos-swiftui faz?
Implemente, revise ou melhore o tratamento de gestos em SwiftUI. Use ao adicionar gestos de toque, pressão longa, arrasto, ampliação ou rotação, compondo gestos com simultaneously/sequenced/exclusively, gerenciando estado transitório com @GestureState, resolvendo conflitos de gestos pai/filho com highPriorityGesture ou simultaneousGesture, construindo conformidades personalizadas com o protocolo Gesture ou migrando do obsoleto MagnificationGesture para MagnifyGesture ou usando o novo RotateGesture.
Gestos Suportados
- Toque (Tap): Use
TapGesturepara detectar toques únicos ou múltiplos. - Pressão Longa (Long Press): Use
LongPressGesturepara detectar toques prolongados. - Arrasto (Drag): Use
DragGesturepara rastrear movimentos de arrasto. - Ampliação (Magnify): Use
MagnifyGesture(novo) ouMagnificationGesture(obsoleto) para detectar gestos de pinça. - Rotação (Rotate): Use
RotateGesturepara detectar gestos de rotação.
Composição de Gestos
Componha múltiplos gestos usando os seguintes modificadores:
simultaneously: Executa gestos simultaneamente.sequenced: Executa gestos em sequência.exclusively: Executa apenas um gesto de cada vez, priorizando o primeiro.
Gerenciamento de Estado
Use @GestureState para gerenciar estado transitório durante a execução de gestos. Exemplo:
@GestureState private var isDragging = false
var dragGesture: some Gesture {
DragGesture()
.updating($isDragging) { value, state, transaction in
state = true
}
}
Resolução de Conflitos
highPriorityGesture: Prioriza gestos pai sobre gestos filho.simultaneousGesture: Permite que gestos pai e filho sejam executados simultaneamente.
Conformidades Personalizadas
Construa conformidades personalizadas com o protocolo Gesture para criar gestos complexos:
struct MyCustomGesture: Gesture {
var body: some Gesture {
// Defina sua composição de gestos aqui
}
}
Migração de APIs Obsoletas
- Substitua
MagnificationGestureporMagnifyGesture(iOS 17+). - Adote
RotateGesture(iOS 17+) em vez da implementação manual de rotação.
Exemplo de Uso
struct GestureExample: View {
@State private var scale: CGFloat = 1.0
@State private var rotation: Angle = .zero
var body: some View {
Text("Amplie e Gire")
.scaleEffect(scale)
.rotationEffect(rotation)
.gesture(
MagnifyGesture()
.onChanged { value in
scale = value.magnification
}
)
.gesture(
RotateGesture()
.onChanged { value in
rotation = value.rotation
}
)
}
}
Notas
- Sempre teste gestos em dispositivos reais para garantir a melhor experiência do usuário.
- Consulte a documentação oficial da Apple para detalhes completos sobre cada gesto.