struct ContentView: View {
@State private var sliderValue = 50.0
@State private var showSlider = true
var body: some View {
VStack {
BullSlider(value: $sliderValue, in: 1.0...100.0)
.opacity(showSlider ? 1 : 0)
Button("Toggle") {
withAnimation {
showSlider.toggle()
}
}
.padding()
}
}
}
struct BullSlider: View {
@Binding var value: Double
var bounds: ClosedRange<Double>
init(value: Binding<Double>, in bounds: ClosedRange<Double>) {
self.bounds = bounds
self._value = value
}
var body: some View {
Slider(value: $value, in: bounds)
.onAppear{
let thumbImage = ImageRenderer(content: bullThumb).uiImage ?? UIImage()
UISlider.appearance().setThumbImage(thumbImage, for: .normal)
}
}
var bullThumb: some View {
VStack {
ZStack {
Circle()
.frame(width: 50, height: 50)
.foregroundColor(.white)
Circle()
.strokeBorder(lineWidth: 6)
.frame(width: 44, height: 44)
Circle()
.strokeBorder(lineWidth: 6)
.frame(width: 24, height: 24)
}
.foregroundColor(.blue)
}
.frame(width: 50, height: 60)
}
}