如何改变SwiftUI中Slider的位置?

时间:2019-12-10 15:18:49

标签: slider swiftui

我正在尝试通过按钮操作来更新/设置滑块值。

        Button(action: {
            if self.questionNum == 1{
                print("End")
            }else{
                self.questionNum -= 1

                //This line here is where the value is being set.

                self.slider.value = self.model.answers[self.questionNum - 1] as! Double

                print(self.model.answers)
                print(self.slider.value)
                self.questionOpacity = 0
                self.model.currentQuestion = self.model.questions[self.questionNum - 1]
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
                    withAnimation(){
                        self.questionOpacity = 1
                    }
                }
            }
        }) {
            Text("Previous Question")
                .font(.system(size: 25))
                .fontWeight(.medium)
                .foregroundColor(Color.white)
                .multilineTextAlignment(.center)
        }

滑杆值实际上发生了变化,但是转盘不会移动或更新以代表新值。我的Slider值来自像这样的Observable对象:

class SliderVal: ObservableObject {

var didChange = PassthroughSubject<SliderVal,Never>()
var value = 50.0 {
   willSet {
    print(self.value)
 }
}

滑块的默认值设置为50,即中间值,是否可以通过任何方式将滑块值设置和更新为存储在数组中的值?输出滑块值实际上可以给我正确的结果,为什么滑块转盘没有移动/更新?

谢谢

2 个答案:

答案 0 :(得分:1)

示例:

struct ContentView: View {

    @State var number : Float

    var body: some View {
        VStack {
            Slider(value: $number, in: 1...100)
                .padding()
            Text("You've selected \(Int(number))")
        }.onAppear() {
            self.number = 30
        }
    }
}

答案 1 :(得分:1)

您用于ObservableObject的模式已经过时(对于Beta有效,现在无效)。而是使用默认的@Published属性包装器,它将自动更新您的视图,并在需要时提供相应的绑定。

所以在这里您的模型应该如何...

class SliderVal: ObservableObject {
    @Published var value = 50.0
}

并且据我所知,应该声明

@ObservedObject var slider = SliderVal()