0Pricing
Swift Academy · Lektion

Benutzerdefinierter AnimatableModifier und Animatable

Animieren Sie selbst gezeichnete Inhalte durch Konformität zu Animatable und AnimatableModifier.

Benutzerdefinierter AnimatableModifier und Animatable ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Animatable-Protokoll

Animatable teilt SwiftUI mit, wie ein Typ während einer Animation interpoliert werden soll. Shapes entsprechen diesem Protokoll automatisch.

struct Wave: Shape, Animatable {
  var amplitude: Double
  var animatableData: Double {
    get { amplitude }
    set { amplitude = newValue }
  }
  func path(in rect: CGRect) -> Path { Path() }
}

Die Eigenschaft animatableData

SwiftUI liest und schreibt animatableData bei jedem Animationsframe, um zwischen den Start- und Endwerten zu interpolieren.

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 für mehrere Werte

Verwenden Sie AnimatablePair, um zwei unabhängige Werte gleichzeitig zu animieren.

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 + Animatable

Wenn Sie einen ViewModifier an Animatable anpassen, können Sie beliebige visuelle Effekte animieren.

struct Shake: ViewModifier, Animatable {
  var animatableData: Double = 0
  func body(content: Content) -> some View {
    content.offset(x: sin(animatableData * .pi * 4) * 8)
  }
}

Die Animation steuern

Ändern Sie den animierbaren Wert innerhalb von withAnimation, und SwiftUI interpoliert ihn über 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 (veraltet) im Vergleich zu Animatable + ViewModifier

AnimatableModifier ist in neueren SDKs veraltet. Passen Sie Ihren ViewModifier stattdessen direkt an Animatable an.

// Modern approach:
struct MyMod: ViewModifier, Animatable { ... }
// Avoid (deprecated):
// struct MyMod: AnimatableModifier { ... }

Benutzerdefinierte Zahlentypen als animatableData

Jeder Typ, der VectorArithmetic entspricht, kann als animatableData verwendet werden. Swift-Typen wie CGFloat, Double und AnimatablePair erfüllen diese Voraussetzung.

extension MyColor: VectorArithmetic {
  static func += (lhs: inout MyColor, rhs: MyColor) { ... }
  mutating func scale(by rhs: Double) { ... }
  var magnitudeSquared: Double { ... }
}

Modifier auf Fortschrittsbasis

Ein gängiges Muster: Animieren Sie einen progress-Wert von 0 bis 1, und berechnen Sie die visuellen Eigenschaften innerhalb des Modifiers.

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))
  }
}

Mit .animation verketten

Fügen Sie eine Animation hinzu, damit der Fortschrittswert des animierbaren Modifiers bei Zustandsänderungen automatisch gesteuert wird.

Text("Loading")
  .modifier(FillModifier(progress: isLoaded ? 1 : 0))
  .animation(.easeInOut(duration: 1.0), value: isLoaded)

Benutzerdefinierte Shapes animieren

Die leistungsfähigste Anwendung: Verformen Sie eine Pfadform in eine andere, indem Sie die Kontrollpunkte über animatableData interpolieren.

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()
  }
}

Leistung

SwiftUI ruft den Body des Modifiers bei jedem Animationsframe auf. Halten Sie die Berechnung innerhalb von body minimal, damit die Animation mit flüssigen 60/120 fps läuft.

// OK: simple math in body
// AVOID: network calls, heavy computation in animated body

Kurze Überprüfung

Was liest und schreibt SwiftUI bei jedem Animationsframe, um einen benutzerdefinierten animierbaren Typ zu interpolieren?

Zusammenfassung der Lektion

Passen Sie Shapes oder ViewModifier an Animatable an, und stellen Sie animatableData (einen VectorArithmetic-Wert) bereit. SwiftUI interpoliert diesen Wert in jedem Frame. Verwenden Sie AnimatablePair für zwei Werte. Steuern Sie die Animation mit withAnimation oder .animation.

Häufig gestellte Fragen

Ist die Lektion „Benutzerdefinierter AnimatableModifier und Animatable“ kostenlos?

Ja — der vollständige Text von „Benutzerdefinierter AnimatableModifier und Animatable“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Benutzerdefinierter AnimatableModifier und Animatable“?

Animieren Sie selbst gezeichnete Inhalte durch Konformität zu Animatable und AnimatableModifier. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Benutzerdefinierter AnimatableModifier und Animatable“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Implizite vs. explizite Animationen
  2. matchedGeometryEffect für Hero-Übergänge
  3. Benutzerdefinierter AnimatableModifier und Animatable
  4. TimelineView und Canvas für leistungsstarkes Zeichnen
← Zurück zu Swift Academy