在SwiftUI中从一个视图切换到另一个视图



我有一个相当基本的设置,但过渡似乎不工作。期望的结果是淡出加载和淡出内容。一旦2秒结束,isLoading被设为false,它就会立即加载ContentView,没有动画过渡。

struct MyApp: App {@State private var isLoading = true

var body: some Scene {
WindowGroup {
ZStack {
if isLoading {
LoadingView()
.transition(.opacity)
.animation(.easeOut(duration: 2.0), value: isLoading)
} else {
ContentView()
.transition(.opacity)
.animation(.easeIn(duration: 2.5), value: isLoading)
}
}
.onAppear {
startApp()
}
}
}
private func startApp() {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
isLoading = false
}
}

}

我尝试了几种不同的方法,但这段代码似乎是最可行的解决方案。

你应该考虑替换

.transition(.opacity)
.animation(.easeIn(duration: 2.5), value: isLoading)

.transition(AnyTransition.opacity.animation(.easeInOut(duration: 2.0)))

animation是如何查看animate的,而不是transit的,这就是为什么它首先不起作用。有许多方法可以修复代码,例如

  1. 请求父视图动画
ZStack {
if isLoading {
ProgressView()
.transition(.opacity)
} else {
Text("ContentView")
.transition(.opacity)
}
}
.animation(.easeOut(duration: 2.0), value: isLoading)
  1. 停止传输视图
ProgressView()
.opacity(isLoading ? 1 : 0)
.animation(.easeOut(duration: 2.0), value: isLoading)
Text("ContentView")
.opacity(isLoading ? 0 : 1)
.animation(.easeOut(duration: 2.0), value: isLoading)

相关内容

  • 没有找到相关文章

最新更新