環境
【Xcode】11.7
【Swift】5.2.4
【iOS】13.7
【macOS】Catalina バージョン 10.15.7
実装方法
通常のスライダーはタップで値を変更できませんが、可能にする方法がありました。
struct TappableSlider: View {
var value: Binding<Float>
var range: ClosedRange<Float>
var step: Float
var body: some View {
GeometryReader { geometry in
Slider(value: self.value, in: self.range, step: self.step)
.gesture(DragGesture(minimumDistance: 0).onEnded { value in
let percent = min(max(0, Float(value.location.x / geometry.size.width * 1)), 1)
let newValue = self.range.lowerBound + round(percent * (self.range.upperBound - self.range.lowerBound))
self.value.wrappedValue = newValue
})
}
}
}
TappableSlider(value: $sliderValue, in: 1...7, step: 1.0)
参考記事