Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  DotHeaderView.swift   Sprache: JAVA

 

import SwiftUI
import ThreemaFramework

struct DotHeaderView: View {
    static let defaultHeight: CGFloat = 350
    static let defaultOverlap: CGFloat = 1.0 / 3.0

    let icon: Icon
    let dotColor: Color
    var height: CGFloat = Self.defaultHeight

    var body: some View {
        DotField(color: dotColor)
            .frame(height: height)
            .overlay {
                IconBadge(icon: icon)
            }
            .accessibilityHidden(true)
    }

    struct Icon {
        let name: String
        let color: Color
        let rotationDegrees: Double

        init(name: String, color: Color, rotationDegrees: Double = 0) {
            self.name = name
            self.color = color
            self.rotationDegrees = rotationDegrees
        }
    }

    private struct DotField: View {
        let color: Color

        private let spacing: CGFloat = 7
        private let dotRadius: CGFloat = 1
        private let falloff: CGFloat = 0.75 // fraction of the short side where dots die out

        var body: some View {
            Canvas { ctx, size in
                let center = CGPoint(x: size.width / 2, y: size.height / 2)
                let maxDist = min(size.width, size.height) * falloff

                var y = spacing / 2
                while y < size.height {
                    var x = spacing / 2
                    while x < size.width {
                        let d = hypot(x - center.x, y - center.y) / maxDist
                        let t = max(0, 1 - d)
                        let alpha = t * t * (3 - 2 * t) // smooth step, softer edge

                        if alpha > 0.01 {
                            let r = dotRadius * (0.75 + 0.25 * alpha) // slight size taper
                            let rect = CGRect(x: x - r, y: y - r, width: r * 2, height: r * 2)
                            ctx.fill(Path(ellipseIn: rect), with: .color(color.opacity(alpha)))
                        }
                        x += spacing
                    }
                    y += spacing
                }
            }
        }
    }

    private struct IconBadge: View {
        @ScaledMetric private var scaledMetric: CGFloat = 1.0

        let icon: DotHeaderView.Icon

        private let side: CGFloat = 85
        private let imageSide: CGFloat = 30
        private let straightSideFraction: CGFloat = 1.0 / 7.0

        private var sideLength: CGFloat { side * scaledMetric }
        private var cornerRadius: CGFloat { sideLength * (1 - straightSideFraction) / 2 }

        var body: some View {
            RoundedRectangle(cornerRadius: cornerRadius, style: .circular)
                .fill(Color(.systemBackground))
                .stroke(Color.gray200, lineWidth: 1.5)
                .frame(width: sideLength, height: sideLength)
                .overlay {
                    Image(systemName: icon.name)
                        .resizable()
                        .scaledToFit()
                        .foregroundStyle(icon.color)
                        .frame(width: imageSide * scaledMetric, height: imageSide * scaledMetric)
                        .fontWeight(.semibold)
                        .rotationEffect(.degrees(icon.rotationDegrees))
                }
        }
    }
}

#if DEBUG
    #Preview {
        ScrollView {
            DotHeaderView(
                icon: .init(name: "key", color: .accentColor),
                dotColor: .accentColor.opacity(0.3)
            )

            Divider()

            DotHeaderView(
                icon: .init(name: "gearshape", color: .accentColor),
                dotColor: .accentColor.opacity(0.3)
            )

            Divider()

            DotHeaderView(
                icon: .init(name: "checkmark.circle", color: .green),
                dotColor: .accentColor
            )

            Divider()

            DotHeaderView(
                icon: .init(name: "exclamationmark.circle", color: .red),
                dotColor: .red
            )
        }
    }
#endif

Messung
CHZG
809010090

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104845
#Domains=499262