在自定义选择器中自定义数字,使其成为 5 的乘数

Customize Number in Custom Picker so that it's a Multiplier of 5

我使用了 here 中的代码,并且我想使自定义滑块仅代表 5 到 180 范围内的 5 倍数的数字。我在 XCode 12.5,这是代码。 PS。这不是完整的代码,但我希望代码与此代码接近。

CustomSlider(value: $someValue, range: 5...180)

方法一

第一种方法是每次变化时someValue的值四舍五入到最接近的5。滑块只能以固定的增量向上移动,所以看起来确实有点跳动。

代码:

struct ContentView: View {
    @State private var someValue: CGFloat = 5

    var body: some View {
        VStack {
            CustomSlider(value: $someValue, range: 5 ... 180)

            Text("Value: \(someValue)")
        }
        .onChange(of: someValue) { newValue in
            someValue = round(newValue / 5) * 5
        }
    }
}

方法二

这种方法滑块是连续的,但是你从sliderValue读取的值四舍五入到最接近的5。我更喜欢这种方法,因为它感觉更平滑。

代码:

struct ContentView: View {
    @State private var someValue: CGFloat = 5
    private var sliderValue: CGFloat {
        round(someValue / 5) * 5
    }

    var body: some View {
        VStack {
            CustomSlider(value: $someValue, range: 5 ... 180)

            Text("Value: \(sliderValue)")
        }
    }
}