TimelineView og Canvas for tegning med høy ytelse
Gjengi sanntidsanimasjoner med TimelineView-planer og Canvas-API-et.
TimelineView og Canvas for tegning med høy ytelse er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Oversikt over TimelineView
TimelineView tegner innholdet på nytt etter en tidsplan, slik at sanntidsanimeringer kan utføres uten tidtakere.
TimelineView(.animation) { timeline in
Text(timeline.date.formatted(date: .omitted, time: .standard))
}Typer av TimelineSchedule
Innebygde tidsplaner: .animation (hver ramme), .periodic (fast intervall), .explicit (bestemte datoer).
TimelineView(.periodic(from: .now, by: 1.0)) { context in
ClockFace(date: context.date)
}Oversikt over Canvas
Canvas tilbyr en 2D-tegningskontekst for høytytende immediate mode-grafikk, tilsvarende Core Graphics.
Canvas { ctx, size in
ctx.fill(
Path(ellipseIn: CGRect(origin: .zero, size: size)),
with: .color(.blue)
)
}Tegne former i Canvas
Bruk metoder i GraphicsContext, for eksempel fill, stroke og draw, for å tegne baner og bilder.
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)
}Kombinere TimelineView og Canvas
Pakk en Canvas inn i TimelineView for bilderamme-for-bilderamme-animering uten oppdateringer av 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))
}
}Løse symboler
Kall ctx.resolve() for å konvertere SwiftUI-visninger, for eksempel Image, til tegnbare symboler for 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 attributerte strenger i Canvas
Tegn tekst med ctx.draw(Text(...), at:) for egendefinert gjengivelse av etiketter i Canvas.
Canvas { ctx, size in
ctx.draw(
Text("Score: 100").font(.title).foregroundStyle(.white),
at: CGPoint(x: size.width/2, y: 30)
)
}Transformasjoner og klipping
Bruk affine transformasjoner og klippebaner på grafikkonteksten for 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))
}Ytelse sammenlignet med SwiftUI-visninger
Canvas gjengir all grafikk i én tegneoperasjon – ideelt for partikkelsystemer eller komplekse diagrammer der tusenvis av visninger ville vært for trege.
// Benchmark: 500 moving dots
// Canvas: ~120fps on iPhone
// SwiftUI views: ~30fps due to view tree overheadTilgjengelighet i Canvas
Canvas-innhold er usynlig for VoiceOver. Legg til tilgjengelighetsetiketter via modifikatoren accessibilityChildren.
Canvas { ctx, size in
// draw chart bars
}
.accessibilityChildren {
ForEach(bars) { Text("\($0.label): \($0.value)") }
}TimelineView-frekvens
Konteksten tilbyr et cadence-tips (live, sekunder, minutter), slik at De kan redusere detaljnivået når systemet er belastet.
TimelineView(.animation) { ctx in
if ctx.cadence == .live {
HighDetailAnimation(date: ctx.date)
} else {
LowDetailAnimation(date: ctx.date)
}
}Kort kontroll
Hvilken TimelineSchedule får TimelineView til å tegne innholdet på nytt ved hver animasjonsramme?
Oppsummering av leksjonen
TimelineView tegner innholdet på nytt etter en tidsplan (for hver ramme med .animation). Canvas tilbyr en 2D-tegningskontekst i immediate mode. Kombiner dem for høytytende partikkeleffekter, spill og sanntidsdiagrammer uten kostnadene ved at SwiftUI sammenligner visninger for hver ramme.
Lær deg Swift med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 122
- Leksjoner
- 409
Ofte stilte spørsmål
Er leksjonen «TimelineView og Canvas for tegning med høy ytelse» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «TimelineView og Canvas for tegning med høy ytelse», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «TimelineView og Canvas for tegning med høy ytelse»?
Gjengi sanntidsanimasjoner med TimelineView-planer og Canvas-API-et. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Swift Academy?
Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «TimelineView og Canvas for tegning med høy ytelse»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?
Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Implisitte kontra eksplisitte animasjoner
- matchedGeometryEffect for hero-overganger
- Egendefinert AnimatableModifier og Animatable
- TimelineView og Canvas for tegning med høy ytelse