GestureSwiftUI

Projet Simplon - Apple Foundation Extended sur les gestures en SwiftUI

View on GitHub

đŸ“±đŸ‘ˆđŸ» 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:

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


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:



7. Outils:


8. Equipe:

đŸ©·