【发布时间】:2020-03-21 05:10:14
【问题描述】:
我有以下看法。
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
}
}
【问题讨论】: