SwiftUI:如何更改 slider 的范围?

标签 swift swiftui

我想创建两个水平 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/

相关文章:

swift - 如何定义在运行使用自定义初始值设定项的结构实例时应运行的自定义闭包 (SwiftUI)

swift - 在 iOS 上选择退出 UISceneDelegate/SwiftUI

swift - 在变量中快速创建对象/实例

objective-c - 从 '(NSNumber) -> NSNumber' 转换为无关类型 '(Any) -> Any' 总是失败

ios - 在窗口中将 UITableViewController 的 UIActivityIndi​​catorView 居中,而不是在 TableView 中

ios - 如何在 SwiftUI 列表/ForEach 中动态创建部分并避免 "Unable to infer complex closure return type"

uinavigationbar - 带有列表的 SwiftUI 自定义导航栏

swift - 在 Swift 中,如何优化字典检查/赋值?

ios - 尝试在已经呈现 UIAlertController 的 ViewController 上呈现 UIViewController

ios - 当我在 SwiftUI 中按下导航后退按钮时,可以添加一些操作吗?