0Pricing
Swift Academy · Lektion

TimelineView und Canvas für leistungsstarkes Zeichnen

Rendern Sie Echtzeitanimationen mit TimelineView-Zeitplänen und der Canvas-API.

TimelineView und Canvas für leistungsstarkes Zeichnen ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Übersicht über TimelineView

TimelineView zeichnet seinen Inhalt nach einem Zeitplan neu und ermöglicht Echtzeitanimationen ohne Timer.

TimelineView(.animation) { timeline in
  Text(timeline.date.formatted(date: .omitted, time: .standard))
}

Arten von TimelineSchedule

Integrierte Zeitpläne: .animation (bei jedem Frame), .periodic (in festen Intervallen), .explicit (zu bestimmten Zeitpunkten).

TimelineView(.periodic(from: .now, by: 1.0)) { context in
  ClockFace(date: context.date)
}

Übersicht über Canvas

Canvas stellt einen 2D-Zeichenkontext für performante Immediate-Mode-Grafiken bereit, ähnlich wie Core Graphics.

Canvas { ctx, size in
  ctx.fill(
    Path(ellipseIn: CGRect(origin: .zero, size: size)),
    with: .color(.blue)
  )
}

Shapes in Canvas zeichnen

Verwenden Sie Methoden von GraphicsContext wie fill, stroke und draw, um Pfade und Bilder zu zeichnen.

Canvas { ctx, size in
  var path = Path()
  path.move(to: .zero)
  path.addLine(to: CGPoint(x: size.width, y: size.height))
  ctx.stroke(path, with: .color(.red), lineWidth: 2)
}

TimelineView und Canvas kombinieren

Betten Sie ein Canvas in TimelineView ein, um Animationen Frame für Frame ohne SwiftUI-Zustandsaktualisierungen auszuführen.

TimelineView(.animation) { timeline in
  Canvas { ctx, size in
    let t = timeline.date.timeIntervalSinceReferenceDate
    let x = size.width * (0.5 + 0.4 * cos(t))
    let y = size.height * (0.5 + 0.4 * sin(t))
    ctx.fill(Path(ellipseIn: CGRect(x: x-10, y: y-10, width: 20, height: 20)), with: .color(.orange))
  }
}

Symbole auflösen

Rufen Sie ctx.resolve() auf, um SwiftUI-Ansichten wie Image in zeichnbare Symbole für Canvas umzuwandeln.

Canvas { ctx, size in
  let symbol = ctx.resolveSymbol(id: "star")!
  ctx.draw(symbol, at: CGPoint(x: 50, y: 50))
} symbols: {
  Image(systemName: "star.fill").tag("star")
}

Text und attributierte Zeichenfolgen in Canvas

Zeichnen Sie Text mit ctx.draw(Text(...), at:), um Beschriftungen innerhalb von Canvas benutzerdefiniert darzustellen.

Canvas { ctx, size in
  ctx.draw(
    Text("Score: 100").font(.title).foregroundStyle(.white),
    at: CGPoint(x: size.width/2, y: 30)
  )
}

Transformationen und Beschneiden

Wenden Sie affine Transformationen und Beschneidungspfade auf den Grafik-Kontext an, um komplexe Effekte zu erzeugen.

Canvas { ctx, size in
  ctx.translateBy(x: size.width/2, y: size.height/2)
  ctx.rotate(by: .degrees(45))
  ctx.fill(Path(CGRect(x: -50, y: -50, width: 100, height: 100)), with: .color(.purple))
}

Leistung im Vergleich zu SwiftUI-Ansichten

Canvas rendert alle Grafiken in einem einzigen Zeichenvorgang – ideal für Partikelsysteme oder komplexe Diagramme, bei denen Tausende von Ansichten zu langsam wären.

// Benchmark: 500 moving dots
// Canvas: ~120fps on iPhone
// SwiftUI views: ~30fps due to view tree overhead

Barrierefreiheit in Canvas

Der Inhalt von Canvas ist für VoiceOver unsichtbar. Fügen Sie über den Modifier accessibilityChildren Beschriftungen für die Barrierefreiheit hinzu.

Canvas { ctx, size in
  // draw chart bars
}
.accessibilityChildren {
  ForEach(bars) { Text("\($0.label): \($0.value)") }
}

Die Taktung von TimelineView

Der Kontext stellt einen Hinweis auf die cadence bereit (live, Sekunden, Minuten), damit Sie den Detailgrad bei hoher Systemauslastung reduzieren können.

TimelineView(.animation) { ctx in
  if ctx.cadence == .live {
    HighDetailAnimation(date: ctx.date)
  } else {
    LowDetailAnimation(date: ctx.date)
  }
}

Kurze Überprüfung

Welche TimelineSchedule-Option bewirkt, dass TimelineView bei jedem Animationsframe neu gezeichnet wird?

Zusammenfassung der Lektion

TimelineView zeichnet seinen Inhalt nach einem Zeitplan neu (mit .animation bei jedem Frame). Canvas stellt einen 2D-Zeichenkontext im Immediate Mode bereit. Kombinieren Sie beide für performante Partikeleffekte, Spiele und Live-Diagramme ohne den Overhead der SwiftUI-View-Differenzierung pro Frame.

Häufig gestellte Fragen

Ist die Lektion „TimelineView und Canvas für leistungsstarkes Zeichnen“ kostenlos?

Ja — der vollständige Text von „TimelineView und Canvas für leistungsstarkes Zeichnen“ 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 „TimelineView und Canvas für leistungsstarkes Zeichnen“?

Rendern Sie Echtzeitanimationen mit TimelineView-Zeitplänen und der Canvas-API. 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 4 von 4.

Wie lange dauert die Lektion „TimelineView und Canvas für leistungsstarkes Zeichnen“?

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