如何根据状态变化在两个自定义视图之间进行转换?

How to transition between two custom views based on state change?

我在 ObservedObject 中有一个状态变量,用于确定我在 SwiftUI 中显示的两个自定义视图中的哪一个。

我已经在不同的地方弄乱了 .animation(.easeIn) 并尝试了 .withAnimation(),但是在试验时除了 XCode 抱怨之外什么也做不了。无论我把 .animation() 放在哪里,我都会得到一个编译错误,当我 运行 代码时没有任何反应。当我触发状态更改时,只需从一个视图轻拂到另一个视图即可。

struct EventEditorView : View { /* SwiftUI based View */
    var eventEditorVC : EventEditorVC!

    @ObservedObject var eventEditorDataModel: EventEditorDataModel

    var body: some View {

        switch( eventEditorDataModel.editMode) {
        case .edit:
            EventEditModeView(eventEditorVC: eventEditorVC, eventEditorDataModel: eventEditorDataModel)
        case .view:
            EventViewModeView(eventEditorVC: eventEditorVC, eventEditorDataModel: eventEditorDataModel)
        }
    }
}

您可以在您的元素上使用 .transition 并在更改影响其状态的 value 时使用 withAnimation

enum ViewToShow {
    case one
    case two
}

struct ContentView: View {
    @State var viewToShow : ViewToShow = .one
    
    var body: some View {
        switch viewToShow {
        case .one:
            DetailView(title: "one", color: .red)
                .transition(.opacity.combined(with: .move(edge: .leading)))
        case .two:
            DetailView(title: "two", color: .yellow)
                .transition(.opacity.combined(with: .move(edge: .top)))
        }
        Button("Toggle") {
            withAnimation {
                viewToShow = viewToShow == .one ? .two : .one
            }
        }
    }
}

struct DetailView : View {
    var title: String
    var color : Color
    
    var body: some View {
        Text(title)
            .background(color)
    }
}