63 lines
1.8 KiB
Swift
63 lines
1.8 KiB
Swift
//
|
|
// ChipEdgePattern.swift
|
|
// Baccarat
|
|
//
|
|
// The edge stripe pattern for casino chips.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
/// The edge stripe pattern for chips.
|
|
struct ChipEdgePattern: View {
|
|
let stripeColor: Color
|
|
|
|
// MARK: - Layout Constants
|
|
|
|
private let stripeCount = 16
|
|
private let stripeWidth: CGFloat = 6
|
|
private let innerRadiusRatio: CGFloat = 0.75
|
|
private let outerRadiusRatio: CGFloat = 0.98
|
|
|
|
var body: some View {
|
|
Canvas { context, size in
|
|
let center = CGPoint(x: size.width / 2, y: size.height / 2)
|
|
let radius = min(size.width, size.height) / 2
|
|
|
|
for i in 0..<stripeCount {
|
|
let angle = Double(i) * (360.0 / Double(stripeCount)) * .pi / 180
|
|
|
|
let innerRadius = radius * innerRadiusRatio
|
|
let outerRadius = radius * outerRadiusRatio
|
|
|
|
let startX = center.x + cos(angle) * innerRadius
|
|
let startY = center.y + sin(angle) * innerRadius
|
|
let endX = center.x + cos(angle) * outerRadius
|
|
let endY = center.y + sin(angle) * outerRadius
|
|
|
|
var path = Path()
|
|
path.move(to: CGPoint(x: startX, y: startY))
|
|
path.addLine(to: CGPoint(x: endX, y: endY))
|
|
|
|
context.stroke(
|
|
path,
|
|
with: .color(stripeColor),
|
|
lineWidth: stripeWidth
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
ZStack {
|
|
Color.Table.preview
|
|
.ignoresSafeArea()
|
|
|
|
ChipEdgePattern(stripeColor: .white)
|
|
.frame(width: 100, height: 100)
|
|
.clipShape(.circle)
|
|
.background(Circle().fill(.red))
|
|
}
|
|
}
|
|
|