SwiftUI - 如何在不影响子视图的情况下在视图之间创建过渡动画?

时间:2021-05-30 01:00:52

标签: swift swiftui swiftui-animation swiftui-view

在 SwiftUI 中,我有一个像这样的总体视图设置:

import SwiftUI


struct ContentView: View {
    @State var index: Int = 0
    var body: some View {
        if self.index == 0{
            FirstView(index: $index)
        }
        if self.index == 1 {
            SecondView(index: $index)
                .transition(.move(edge: .bottom))
                .animation(.easeIn)
        }

    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

我在 FirstView 中有一个按钮相当于:

Button(action: {
   self.index = 1
}){
   Text("Change view")
}

这很好用,一切都很好,但我注意到,使用这种方法,任何以带有过渡动画的子视图中的 if/else 语句为条件的视图(即本例中的 SecondView),也有应用了这些动画

例如,如果 SecondView 如下所示:

struct SecondView: View {
    @Binding var index: Int
    @State var boolean: Bool = false
    var body: some View {
        VStack{
            if self.boolean == true {
                Text("Hello!")
            }
            Button(action: {
                self.boolean = true
            }){
                Text("change boolean")
            }
        }
    }
}

Text("Hello") 也会有 .transition(.move(edge: .bottom)) 转换。

有什么办法可以防止这种情况/更好的方法来创建从一个视图到另一个视图的过渡动画?

0 个答案:

没有答案