
struct ColorSlider: View {
let title: String
let color: Color
@Binding var value: Double
@Binding var dragging: Bool
var body: some View {
Slider(value: $value, in: 0...255, step: 1) {
EmptyView()
} minimumValueLabel: {
Text(title)
.foregroundStyle(color)
.frame(minWidth: 50)
} maximumValueLabel: {
Text("\(Int(value))")
.foregroundStyle(color)
.frame(minWidth: 50)
} onEditingChanged: { editing in
dragging = editing
}
.padding()
.tint(color)
}
}
struct Slider_Tutorials: View {
@State private var r = 0.0
@State private var g = 0.0
@State private var b = 0.0
@State private var dragging = false
var color: Color {
Color(red: r / 255, green: g / 255, blue: b / 255)
}
var body: some View {
VStack {
Button("Reset") {
r = 0.0
g = 0.0
b = 0.0
}
.buttonStyle(.borderedProminent)
.disabled(dragging)
Image(systemName: "umbrella.fill")
.resizable()
.foregroundColor(color)
.frame(width: 250, height: 250)
ColorSlider(title: "R", color: .red, value: $r, dragging: $dragging)
ColorSlider(title: "G", color: .green, value: $g, dragging: $dragging)
ColorSlider(title: "B", color: .blue, value: $b, dragging: $dragging)
}
}
}