AnimatableModifier et Animatable personnalisés
Animer du contenu dessiné personnalisé en le faisant conformer à Animatable et AnimatableModifier.
AnimatableModifier et Animatable personnalisés est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.
Le protocole Animatable
Animatable indique à SwiftUI comment interpoler un type pendant une animation. Les formes s’y conforment automatiquement.
struct Wave: Shape, Animatable {
var amplitude: Double
var animatableData: Double {
get { amplitude }
set { amplitude = newValue }
}
func path(in rect: CGRect) -> Path { Path() }
}Propriété animatableData
SwiftUI lit et écrit animatableData à chaque image de l’animation afin d’interpoler les valeurs de début et de fin.
struct GrowingCircle: Shape {
var radius: Double
var animatableData: Double {
get { radius }
set { radius = newValue }
}
func path(in rect: CGRect) -> Path {
Path(ellipseIn: CGRect(x: rect.midX-radius, y: rect.midY-radius, width: radius*2, height: radius*2))
}
}AnimatablePair pour plusieurs valeurs
Utilisez AnimatablePair pour animer simultanément deux valeurs indépendantes.
struct Sector: Shape {
var startAngle: Double, endAngle: Double
var animatableData: AnimatablePair<Double, Double> {
get { AnimatablePair(startAngle, endAngle) }
set { startAngle = newValue.first; endAngle = newValue.second }
}
func path(in rect: CGRect) -> Path { Path() }
}ViewModifier et Animatable
Faire en sorte qu’un ViewModifier se conforme à Animatable permet d’animer des effets visuels arbitraires.
struct Shake: ViewModifier, Animatable {
var animatableData: Double = 0
func body(content: Content) -> some View {
content.offset(x: sin(animatableData * .pi * 4) * 8)
}
}Piloter l’animation
Modifiez la valeur animable dans withAnimation et SwiftUI effectue l’interpolation via animatableData.
struct ShakeView: View {
@State private var shakes = 0.0
var body: some View {
Text("Hello")
.modifier(Shake(animatableData: shakes))
.onTapGesture {
withAnimation(.linear(duration: 0.5)) { shakes += 1 }
}
}
}AnimatableModifier (obsolète) contre Animatable et ViewModifier
AnimatableModifier est obsolète dans les SDK ultérieurs. Préférez la conformité directe de votre ViewModifier à Animatable.
// Modern approach:
struct MyMod: ViewModifier, Animatable { ... }
// Avoid (deprecated):
// struct MyMod: AnimatableModifier { ... }Types numériques personnalisés comme animatableData
Tout type conforme à VectorArithmetic peut être utilisé comme animatableData. CGFloat, Double et AnimatablePair de Swift conviennent tous.
extension MyColor: VectorArithmetic {
static func += (lhs: inout MyColor, rhs: MyColor) { ... }
mutating func scale(by rhs: Double) { ... }
var magnitudeSquared: Double { ... }
}Modificateur fondé sur la progression
Modèle courant : animez une valeur progress de 0 à 1, puis calculez les propriétés visuelles dans le modificateur.
struct FillModifier: ViewModifier, Animatable {
var progress: Double
var animatableData: Double { get { progress } set { progress = newValue } }
func body(content: Content) -> some View {
content.overlay(Color.blue.opacity(progress))
}
}Enchaîner avec .animation
Ajoutez une animation pour piloter automatiquement la valeur de progression du modificateur animable lors des changements d’état.
Text("Loading")
.modifier(FillModifier(progress: isLoaded ? 1 : 0))
.animation(.easeInOut(duration: 1.0), value: isLoaded)Animer des formes personnalisées
Le cas d’utilisation le plus puissant consiste à transformer une forme de chemin en une autre en interpolant les points de contrôle via animatableData.
struct Blob: Shape, Animatable {
var bulge: Double
var animatableData: Double { get { bulge } set { bulge = newValue } }
func path(in rect: CGRect) -> Path {
// compute bezier with bulge-adjusted control points
Path()
}
}Performance
SwiftUI appelle le corps du modificateur à chaque image de l’animation. Réduisez les calculs effectués dans le corps afin de conserver une animation fluide à 60 ou 120 images par seconde.
// OK: simple math in body
// AVOID: network calls, heavy computation in animated bodyVérification rapide
Que lit et écrit SwiftUI à chaque image de l’animation pour interpoler un type animable personnalisé ?
Récapitulatif de la leçon
Rendez vos formes ou vos modificateurs de vue conformes à Animatable et exposez animatableData (une valeur de type VectorArithmetic). SwiftUI l’interpole à chaque image. Utilisez AnimatablePair pour deux valeurs. Pilotez l’animation avec withAnimation ou .animation.
Questions Fréquemment Posées
La leçon « AnimatableModifier et Animatable personnalisés » est-elle gratuite ?
Oui — le texte complet de « AnimatableModifier et Animatable personnalisés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « AnimatableModifier et Animatable personnalisés » ?
Animer du contenu dessiné personnalisé en le faisant conformer à Animatable et AnimatableModifier. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « AnimatableModifier et Animatable personnalisés » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Animations implicites et explicites
- matchedGeometryEffect pour les transitions héroïques
- AnimatableModifier et Animatable personnalisés
- TimelineView et Canvas pour un dessin haute performance