我想创建两个水平 slider 。一个 slider 的范围为 21 到 90,但从 50 开始, slider 应以“10 步”移动。例如。 21、22、23、...、50、60、70、80、90。另一个 slider 应该能够显示以下双数:1.2、1.3、1.4、1.5、1.6
我写了以下函数:
struct SliderOne: View {
@State var valueArray : [Int] = []
var body: some View {
Text("Placeholder")
}
func initPickerIndex(){
valueArray = []
for index1 in 21..<50 {
valueArray.append(index1)
}
for index2 in 1...5 {
valueArray.append(40 + index2 * 10)
}
}
}
我可以使用这个吗?
最佳答案
您可以创建一个 slider 绑定(bind)管理器 ObservableObject
并添加一个 onChange
方法来观察 slider 值。如果它超过 50,只需减去它的值并截断除以 10 的余数:
struct ContentView: View {
@ObservedObject var sliderBindingManager = SliderBindingManager(value: 21)
@State var value1: Int = 21
@State var value2: Double = 1.2
var body: some View {
Slider(
value: $sliderBindingManager.value,
in: 21...90,
step: 1
)
.onChange(of: sliderBindingManager.value) {
if $0 > 50 {
sliderBindingManager.value = ($0 / 10).rounded(.toNearestOrEven) * 10
}
value1 = Int(sliderBindingManager.value)
}
Text("\(value1)")
Slider(value: $value2, in: 1.2...1.6, step: 0.1)
Text("\(value2, specifier: "%.1f")")
}
}
class SliderBindingManager: ObservableObject {
@Published var value: Double
init(value: Double) { self.value = value }
}
关于SwiftUI:如何更改 slider 的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64731123/