我持有以下观点。
import SwiftUI
struct AppView: View {
@EnvironmentObject var appStore: AppStore
var body: some View {
ZStack {
Color.blue
if .game == self.appStore.appMode {
GameView()
} else if .options == self.appStore.appMode {
OptionsView()
} else {
MenuView()
}
}
}
}
我想对子视图之间的切换进行动画处理。
我看到一些使用一个状态来进行切换的示例,但我需要使用多个状态。
我还尝试在子视图内使用 onAppear
和 onDisappear
来应用动画。这是可行的,但当视图不再显示时,onDisappear
就不再执行了。此外,我希望它能适用于全部视图。
有没有办法在不使用多种状态的情况下做到这一点?我想只使用 .transition
和 .animation
。
目前,我认为最好的解决方案是这样的。
import SwiftUI
struct AppView: View {
@EnvironmentObject var appStore: AppStore
var body: some View {
ZStack {
Color.blue
if .game == self.appStore.appMode {
GameView()
.transition(.scale)
.zIndex(1) // to keep the views on top, however this needs to be changed when the active child view changes.
} else if .options == self.appStore.appMode {
OptionsView()
.transition(.scale)
.zIndex(2)
} else {
MenuView()
.transition(.scale)
.zIndex(3)
}
}
}
}
在每个视图切换器上。
.onTapGesture {
withAnimation(.easeInOut(duration: 2)) {
self.appStore.appMode = .game
}
}
.slide
动画不起作用呢?.scale
和.opacity
效果完美。你知道原因吗? - acmpo6ou