TimelineView og Canvas til højtydende tegning
Gengiv animationer i realtid med TimelineView-planer og Canvas-API'et.
TimelineView og Canvas til højtydende tegning er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.
Oversigt over TimelineView
TimelineView tegner sit indhold igen efter en tidsplan, så realtidsanimationer kan oprettes uden timere.
TimelineView(.animation) { timeline in
Text(timeline.date.formatted(date: .omitted, time: .standard))
}Typer af TimelineSchedule
Indbyggede tidsplaner: .animation (ved hvert billede), .periodic (fast interval) og .explicit (bestemte datoer).
TimelineView(.periodic(from: .now, by: 1.0)) { context in
ClockFace(date: context.date)
}Oversigt over Canvas
Canvas leverer en 2D-tegnekontekst til højtydende grafik i immediate mode, på samme måde som Core Graphics.
Canvas { ctx, size in
ctx.fill(
Path(ellipseIn: CGRect(origin: .zero, size: size)),
with: .color(.blue)
)
}Tegning af figurer i Canvas
Brug metoder fra GraphicsContext som fill, stroke og draw til at gengive kurver og billeder.
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)
}Kombination af TimelineView og Canvas
Pak en Canvas ind i TimelineView for at animere billede for billede uden opdateringer af SwiftUI-tilstanden.
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))
}
}Opløsning af symboler
Kald ctx.resolve() for at opløse SwiftUI-visninger (som Image) til tegnbare symboler i Canvas.
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")
}Tekst og attributterede strenge i Canvas
Tegn tekst med ctx.draw(Text(...), at:) for at gengive brugerdefinerede etiketter i Canvas.
Canvas { ctx, size in
ctx.draw(
Text("Score: 100").font(.title).foregroundStyle(.white),
at: CGPoint(x: size.width/2, y: 30)
)
}Transformationer og klipning
Anvend affine transformationer og klippestier på tegnekonteksten for at skabe komplekse effekter.
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))
}Ydeevne sammenlignet med SwiftUI-visninger
Canvas gengiver al grafik i én tegnepassage — ideelt til partikelsystemer eller komplekse diagrammer, hvor tusindvis af visninger ville være for langsomme.
// Benchmark: 500 moving dots
// Canvas: ~120fps on iPhone
// SwiftUI views: ~30fps due to view tree overheadTilgængelighed i Canvas
Indhold i Canvas er usynligt for VoiceOver. Tilføj tilgængelighedsetiketter via modifikatoren accessibilityChildren.
Canvas { ctx, size in
// draw chart bars
}
.accessibilityChildren {
ForEach(bars) { Text("\($0.label): \($0.value)") }
}Tidsinterval i TimelineView
Konteksten leverer et cadence-fingerpeg (live, sekunder, minutter), så du kan reducere detaljegraden, når systemet er belastet.
TimelineView(.animation) { ctx in
if ctx.cadence == .live {
HighDetailAnimation(date: ctx.date)
} else {
LowDetailAnimation(date: ctx.date)
}
}Hurtigt tjek
Hvilken TimelineSchedule får TimelineView til at tegne indholdet igen ved hvert animationsbillede?
Opsummering af lektionen
TimelineView tegner indholdet igen efter en tidsplan (ved hvert billede med .animation). Canvas leverer en 2D-tegnekontekst i immediate mode. Kombiner dem til højtydende partikkeleffekter, spil og live-diagrammer uden den ekstra belastning ved, at SwiftUI sammenligner visninger ved hvert billede.
Lær Swift med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 122
- Lektioner
- 409
Ofte stillede spørgsmål
Er lektionen “TimelineView og Canvas til højtydende tegning” gratis?
Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “TimelineView og Canvas til højtydende tegning”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “TimelineView og Canvas til højtydende tegning”?
Gengiv animationer i realtid med TimelineView-planer og Canvas-API'et. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Swift Academy?
Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “TimelineView og Canvas til højtydende tegning”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Swift Academy-lektion?
Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Implicitte vs. eksplicitte animationer
- matchedGeometryEffect til hero-overgange
- Brugerdefineret AnimatableModifier og Animatable
- TimelineView og Canvas til højtydende tegning