Skip to main content

Radialer Farbverlauf im Canvas

Beschreibung

FarbveralufDiese View zeichnet mit dem Canvas eine Ellipse, die über einen radialen Farbverlauf von Gelb überzu OrangeRot nachschattiert Grün.wird. Der Verlauf gehtist in der Mitte zentriert und füllt den verfügbaren Bereich, wodurch ein leuchtender Spotlight Effekt entsteht.

🔍 Zweck

  • Hintergrundelemente mit weicher Lichtwirkung gestalten
  • Verläufe für Badges oder dekorative UI Elemente erzeugen
  • Prototyping von innenCharts nachmit außen.radialen Highlights
  • Lernbeispiel für GraphicsContext.Shading im Canvas
  • Erstellung individueller Grafiken ohne externe Assets

🖥️ Betriebssystem

iOS

📄 Codebeispiel

import SwiftUI

@main
struct RadialGradientCanvasApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

public struct ContentView: View {
    public init() {}

    public var body: some View {
        Canvas { context, size in
            let// Define a radial gradient shading from center to the edges
            let shading = GraphicsContext.Shading.radialGradient(
                Gradient(colors: [.yellow, .orange, .red])
            let radial = GraphicsContext.Shading.radialGradient(
                Gradient(colors: gradient.stops.map(\.color)),
                center: .init(CGPoint(x: size.width / 2, y: size.height / 2),
                startRadius: 10,
                endRadius: max(size.widthwidth, size.height) / 2
            )

            context.fill(Path(ellipseIn:// Draw an ellipse that covers the entire canvas
            let rect = CGRect(origin: .zero, size: size)),
            let ellipse = Path(ellipseIn: rect)

            // Fill the ellipse using the radial gradient shading
            context.fill(ellipse, with: radial)shading)
        }
        .frame(width: 200, height: 200)
        .cornerRadius(20)
        .padding()
        // Optional background to better showcase the gradient edge
        .background(Color(.systemBackground))
    }
}

// Modern Swift 5.10+ preview syntax
#Preview {
    ContentView()
}