Установка значения ползунка SwiftUI, нажав на него - PullRequest
0 голосов
/ 04 ноября 2019

Как я могу изменить значение SwiftUI Slider, нажав на него?

1 Ответ

1 голос
/ 04 ноября 2019

Вот минимальная реализация, которую я создал, используя GeometryReader , который округляется до ближайшего значения:

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)
...