đ±đđ» Les Gestures en SwiftUI
Une Gesture en SwiftUI est une interaction tactile spécifique et intentionnelle faite par l'utilisateur.
Elles permettent de dĂ©tecter et de rĂ©agir aux interactions physiques de lâutilisateur avec les vues:
- taps
- glissements
- pincements
- rotations
- etcâŠ
Le composant Button intÚgre déjà sa propre mécanique de gesture. (un seul tap).
1. Fonctionnement
Le principe est dâattacher un objet Gesture Ă une vue Ă lâaide du modificateur de vue .gesture().
Lâapproche de SwiftUI est dĂ©clarative et rĂ©active : vous dĂ©clarez quel geste doit ĂȘtre reconnu, et la vue se met Ă jour automatiquement en modifiant une @State.
Cycle de Vie du Geste
onChanged: DĂ©clenchĂ© de maniĂšre rĂ©pĂ©tĂ©e pendant que le geste est en cours (utile pour suivre un mouvement comme un glissement).onEnded: DĂ©clenchĂ© lorsque lâutilisateur met fin au geste (par exemple, en relĂąchant le doigt).
2. Les Types de Gestes Intégrés
SwiftUI fournit cinq gestes prédéfinis (built-in) pour couvrir les interactions les plus courantes :
| Type de Geste | Interaction Détectée | Description & Valeur de sortie |
|---|---|---|
TapGesture |
Un ou plusieurs taps (clics). | Simple reconnaissance, sans état continu. |
LongPressGesture |
Un tap maintenu pendant une durĂ©e spĂ©cifique. | Peut ĂȘtre utilisĂ© pour afficher un menu contextuel. |
DragGesture |
Un glissement ou un déplacement continu. | Fournit la propriété clé value.translation pour le déplacement. |
MagnificationGesture |
Mouvement de pincement à deux doigts. | Fournit la propriété value.scale (facteur de zoom). |
RotationGesture |
Mouvement de rotation à deux doigts. | Fournit la propriété value.rotation (angle de rotation). |
3. Gestion des Interactions
Les possibilités des gestes sont étendues via des raccourcis pratiques et des mécanismes de composition.
Pour les cas trĂšs simples, on utilise des modificateurs de vue qui encapsulent le geste :
| Modificateur (Raccourci) | Ăquivalent Gesture Complet |
Utilisation |
|---|---|---|
.onTapGesture { ... } |
Simplifie lâutilisation du TapGesture. |
Tap simple. |
.onTapGesture(count: 2) { ... } |
Version simplifiée pour la détection. | Double-tap. |
La Composition pour les Gestes Avancées
Le mĂ©canisme de composition permet de combiner les gestes de base pour crĂ©er une logique dâinteraction unique et plus complexe.
| Modificateur de Composition | But | Exemple |
|---|---|---|
.simultaneously(with: ) |
Reconnaissance SimultanĂ©e | Permet de Drag (glisser) et de Magnify (pincer) un Ă©lĂ©ment en mĂȘme temps. |
.sequenced(before: ) |
Reconnaissance Séquentielle | Exige un ordre précis : le Geste 1 doit réussir avant que le Geste 2 puisse commencer (ex: Long Press puis Drag). |
.exclusively(before: ) |
Reconnaissance Prioritaire | Permet de donner la prioritĂ© au Geste 1. Sâil ne rĂ©ussit pas, le systĂšme tente le Geste 2. |
4. Exemple Pratique :
Rendre un ĂlĂ©ment DĂ©plaçable
Lâexemple classique du DragGesture pour dĂ©placer un Ă©lĂ©ment Ă lâĂ©cran :
import SwiftUI
struct DraggableRectangle: View {
@State private var offset: CGSize = .zero
var body: some View {
Rectangle()
.fill(Color.blue)
.frame(width: 100, height: 100)
.offset(offset)
.gesture(
DragGesture()
.onChanged { value in
offset = value.translation
}
.onEnded { _ in
withAnimation {
offset = .zero
}
}
)
}
}
#Preview {
DraggableRectangle()
}
5.1. Exemples:
6. Ressources:
- Présentation Canva.
- Documentation Officielle Apple (Gestures API)
- Tutoriel Apple (Ajouter de lâInteractivitĂ©)
7. Outils:
- Canva
- Gemini & co
- GitHub
- NoteBookKLM
- VSCode
8. Equipe:
- Andrei
- Edilene
- Florian
- Séverine
- Stacy
đ©·