在自定义选择器中自定义数字,使其成为 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)")
}
}
}
我使用了 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)")
}
}
}