使用SwiftUI在没有动画整个视图的情况下过渡视图

时间:2019-11-04 18:20:03

标签: swift swiftui

使用SwiftUI,我有一个视图,其中包含一个滑块,我正在使用一个过渡从底部插入。一切运行良好,直到滑块来回快速移动。这样,文本字段将被设置为动画,当从1位数更改为两位数时将显示“ ...”。

这是我的测试代码,显示以下内容:

struct TestSliderView: View {
    @State private var val: Double = 0
    @State private var showSlider: Bool = false

    var body: some View {
        VStack {
            Button(action: {
                self.showSlider.toggle()
            }) {
                Text("Show Slider")
            }
            Spacer()

            if showSlider {
                JustTheSlider(val: $val)
                    .padding()
                    .transition(.move(edge: .bottom))
                    .animation(.linear(duration: 0.4))
            }
        }
    }
}

struct JustTheSlider: View {
    @Binding var val: Double
    var body: some View {
        VStack {
            Text("Slider")
                .font(.title)
            HStack {
                Text("Value: ")
                    .frame(minWidth: 80, alignment: .leading)
                Slider(value: $val, in: 0...30, step: 1)
                Text("\(Int(val))")
                    .frame(minWidth: 20, alignment: .trailing)
                    .font(Font.body.monospacedDigit())
                    .padding(.horizontal)
            }
        }
    }
}

解决此问题的一种方法是删除.animation(.linear(duration: 0.4))行,并用如下动画包装按钮动作:

            Button(action: {
                withAnimation(.linear(duration: 0.4)) {
                    self.showSlider.toggle()
                }
            }) {
                Text("Show Slider")
            }

这会阻止文本动画,但是视图只会滑出,而不会出现任何滑动动画而弹出。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要设置状态变量的动画,而不是View的动画。

data = request.json['message']\nTypeError: 'NoneType' object is not subscriptable

如最后一行所示。