Animation en SwiftUI

Introduction à l'Animation

L'animation est une fonctionnalité qui permet d'apporter des modifications en douceur aux vues d'une application en fonction des variations d'état. Dans SwiftUI, il existe deux catégories d'animation : l'animation implicite et l'animation explicite. Ces animations sont des outils puissants pour rendre les applications plus interactives, améliorant ainsi l'expérience utilisateur. Pour animer des vues personnalisées, il est nécessaire de se conformer au protocole Animatable, qui informe SwiftUI sur les valeurs à animer.

Animation Implicite avec .animation()

Pour intégrer une animation à une vue, il faut trois éléments essentiels :

  1. Une variable qui subit une modification pour déclencher l'animation.
  2. Un contrôle de flux pour gérer le processus d'animation.
  3. L'animation réelle, qui est appliquée via le modificateur .animation() sur la vue ciblée.

Voici un exemple d'animation implicite :

struct ImplicitAnimation: View {
    @State var isAnimationActive = false // Variable d'état modifiée pour activer l'animation.
    var body: some View {
        Button {
            isAnimationActive.toggle()
        } label: {
            Text(isAnimationActive ? "Bonjour, Monde!" : "Cliquez moi") // Changement de vue basé sur isAnimationActive.
                .foregroundColor(.white)
                .padding(.all)
                .background(isAnimationActive ? Color.black : Color.red) // Changement de couleur arrière-plan selon isAnimationActive.
                .animation(.default, value: isAnimationActive) // Animation implicite activée par isAnimationActive.
        }
    }
}

Ce fragment de code illustre une animation simple où le fond et le texte du bouton s'adaptent en fonction de la variable isAnimationActive. Lorsqu'on appuie sur le bouton, cette variable change, entraînant une animation qui modifie le texte et le fond.

Animation Explicite avec withAnimation()

Pour réaliser une animation explicite, il faut suivre les mêmes trois étapes qu'avec l'animation implicite. Le code suivant démontre un exemple d'animation explicite, modifiant la position d'un bouton :

struct ExplicitAnimation: View {
    @State var isAnimationActive = false // Variable d'état modifiée pour activer l'animation.
    var body: some View {
        Button {
            withAnimation(.spring()) {
                isAnimationActive.toggle() // Changement d'état pour l'animation explicite.
            }
        } label: {
            Text("Cliquez moi")
                .foregroundColor(.white)
                .padding(.all)
                .background(Color.black)
        }
        .offset(x: isAnimationActive ? -20 : 60, y: 0) // Changement de position basé sur isAnimationActive.
    }
}

Il est important de noter que withAnimation() n'est pas un modificateur de vue comme .animation(). C'est plutôt une fonction appelée pour effectuer en douceur des changements d'état, ce qui implique que toutes les vues utilisant ce même état subissent également l'animation.

Conclusion et Utilisation dans des Projets Web

Comme le montre l'exemple ci-dessus, withAnimation() permet de modifier la position du bouton avec un effet de ressort. Un des avantages notables de l'animation explicite est la capacité d'harmoniser plusieurs vues avec un seul appel à withAnimation(), tant qu'elles partagent la même variable d'état. Ainsi, pour animer simultanément la couleur d'arrière-plan et la position du bouton, un opérateur ternaire peut être employé dans le .background(). Voici le code ajusté :

struct ExplicitAnimation: View {
    @State var isAnimationActive = false // Variable d'état modifiée pour activer l'animation.
    var body: some View {
        Button {
            withAnimation(.spring()) {
                isAnimationActive.toggle() // Modification d'état pour l'animation explicite.
            }
        } label: {
            Text("Cliquez moi")
                .foregroundColor(.white)
                .padding(.all)
                .background(isAnimationActive ? Color.blue : Color.black) // Changement de couleur en fonction de l'état.
        }
        .offset(x: isAnimationActive ? -20 : 60, y: 0) // Ajustement de la position.
    }
}

En intégrant ces concepts d'animation, vous pouvez véritablement transformer l'interaction des utilisateurs avec votre application ou site web, apportant ainsi dynamisme et fluidité. En apprenant et en maîtrisant ces animations dans SwiftUI, vous serez en mesure de créer des sites Web et des applications innovantes qui captent l'attention de vos utilisateurs.