blob: a2be49535d1e340a1d85d958847cdad64701a74f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import SwiftUI
public struct PatternView: View {
public var design: TileDesign
public var pixelSize: CGFloat
public var foregroundColor: Color
public var backgroundColor: Color
private let image: CGImage
private var patternSize: CGFloat {
pixelSize * 8.0;
}
public init(design: TileDesign, pixelSize: CGFloat = 2.0, foregroundColor: Color = .black, backgroundColor: Color = .white) {
self.design = design
self.pixelSize = pixelSize
self.foregroundColor = foregroundColor
self.backgroundColor = backgroundColor
#if os(iOS) || os(watchOS) || os(tvOS)
let foregroundCGColor = UIColor(foregroundColor).cgColor
let backgroundCGColor = UIColor(backgroundColor).cgColor
#else
let foregroundCGColor = NSColor(foregroundColor).cgColor
let backgroundCGColor = NSColor(backgroundColor).cgColor
#endif
self.image = TileImage.image(design, pixelSize: pixelSize, foregroundColor: foregroundCGColor, backgroundColor: backgroundCGColor)
}
public var body: some View {
Image(image, scale: 1, label: Text("Test")).resizable(resizingMode: .tile).drawingGroup()
}
}
#Preview {
@Previewable @State var design: TileDesign = .grid
VStack {
Text("Default")
PatternView(design: TileDesign.grid)
Text("Color override")
PatternView(design: TileDesign.balls, foregroundColor: .pink, backgroundColor: .cyan)
Text("Pixel size override")
PatternView(design: TileDesign.shingles, pixelSize: 8.0)
Text("Redraw on change")
PatternView(design: design)
.onAppear {
withAnimation(
.linear(duration: 2.0)
.repeatForever()
) {
design = .balls
}
}
}
}
|