SwiftUI:在 WindowGroup 中的两个视图之间设置动画转换不起作用

dre*_*kka 3 swiftui

所以我认为在应用程序的主视图和设置视图之间转换会很容易。应用程序代码如下所示:

struct PointsMasterII: App {

    @StateObject var settings = AppSettings()

    var body: some Scene {
        WindowGroup {
            if settings.displaySettings {
                SettingsView()
                    .environmentObject(settings)
                    .transition(.slide)
            } else {
                ContentView()
                    .environmentObject(settings)
                    .transition(.slide)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是非常基本的,在每个视图中我都定义了以下按钮:


@EnvironmentObject private var settings: AppSettings

var body: some View {

    // ...

    Button {
        withAnimation {
            settings.displaySettings.toggle()
        }
    } label: {
        Image(systemName: "gearshape.2").font(.title)
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序并点击按钮时,两个视图按预期切换,但没有任何动画。我已经尝试了很多方法,但似乎没有任何效果,并且我在互联网上找到的所有教程都说这应该“有效”。

知道缺少什么吗?

Asp*_*eri 5

没有动画修改器,因此没有动画,尝试将其包装在Group或某个容器中(但是,从设计角度来看,将所有这些移入ContentView并单独替换MainViewSettingsView在那里更合适)

var body: some Scene {
    WindowGroup {
      Group {      // or VStack
        if settings.displaySettings {
            SettingsView()
                .environmentObject(settings)
                .transition(.slide)
        } else {
            ContentView()
                .environmentObject(settings)
                .transition(.slide)
        }
      }
      .animation(.default, value: settings.displaySettings)
    }
}
Run Code Online (Sandbox Code Playgroud)