SwiftUI条件视图转换不工作
考虑以下代码:SwiftUI条件视图转换不工作,swift,animation,swiftui,Swift,Animation,Swiftui,考虑以下代码: class ApplicationHostingView: ObservableObject { @Published var value: Bool } struct ApplicationHostingView: View { // view model env obj var body: some View { Group { if applicationHostingViewModel.value { LoginView(
class ApplicationHostingView: ObservableObject {
@Published var value: Bool
}
struct ApplicationHostingView: View {
// view model env obj
var body: some View {
Group {
if applicationHostingViewModel.value {
LoginView()
.transition(.move(edge: .leading)) // <<<< Transition for Login View
} else {
IntroView()
}
}
}
}
struct IntroView: View {
// view model env obj
var body: some View {
Button(action: { applicationHostingViewModel.value = true }) {
Text("Continue")
}
}
}
struct LoginView: View {
var body: some View {
Text("Hello World")
}
}
问题
在本例中,我看到我从IntroView到LoginView的转换工作正常,除了任何动画。基于条件的IntroView内的动画似乎工作正常,但改变整个屏幕的过渡似乎不起作用
将组更改为ZStack
在某处添加动画
class ApplicationHostingViewModel: ObservableObject {
@Published var value: Bool = false
}
struct ApplicationHostingView: View {
// view model env obj
@ObservedObject var applicationHostingViewModel : ApplicationHostingViewModel
var body: some View {
ZStack {
if applicationHostingViewModel.value {
LoginView()
.transition(.move(edge: .leading))
} else {
IntroView(applicationHostingViewModel:applicationHostingViewModel)
}
}
}
}
struct IntroView: View {
// view model env obj
@ObservedObject var applicationHostingViewModel : ApplicationHostingViewModel
var body: some View {
Button(action: {
withAnimation(.default){
self.applicationHostingViewModel.value = true} }) {
Text("Continue")
}
}
}
struct LoginView: View {
var body: some View {
Text("Hello World").frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
例如,将组更改为ZStack启用的转换添加到LoginView内部的文本视图中。但是,我已经有了一个转换:`.transition.moveedge:。在LoginView上处于领先状态。为什么这不起作用呢?没有容器来装中转卡。你能举一个例子,说明如何使用容器为整个过程提供转换吗?我想我不确定如何在这里定义转换上下文,以启用能够处理此转换的容器视图。等等,我刚刚尝试了你的示例,这似乎很有效。我以前甚至用ZStack也没有这种行为。我将很快在这里发表评论。