Я хотел бы анимировать изменение представления.
В частности, я создал представление, в котором один из его дочерних элементов является изменяющимся представлением.
struct MasterView: View {
@State var playerLeft: Bool = false
@ObservedObject var viewModel: MasterViewModel
var body: some View {
ZStack {
WaitPlayerBackView(isShowing: self.$playerLeft) {
self.viewModel.currentView
}
}
}
}
Модель представления - это класс ObservableObject. currentView изменяется методом, вызываемым из потока asyn c, например:
class MasterViewModel: ObservableObject {
@Published var currentView: AnyView = AnyView(EmptyView())
func changeView() {
self.currentView = AnyView(NightView())
}
}
Это похоже на копию Android фрагментов (простите за сравнение).
Как я могу оживить это Посмотреть изменение?
Я пробовал разные варианты, например:
self.viewModel.currentView.animate(.default)
или
struct MasterView: View {
@State var playerLeft: Bool = false
@ObservedObject var viewModel: MasterViewModel
var body: some View {
ZStack {
WaitPlayerBackView(isShowing: self.$playerLeft) {
self.viewModel.currentView
}
}.animate(self.viewModel.animate ? .easeIn(duration: 1) : .none)
}
}
class MasterViewModel: ObservableObject {
@Published var currentView: AnyView = AnyView(EmptyView())
@Published var animate = false
func changeView() {
self.animate = false
self.currentView = AnyView(NightView())
self.animate = true
}
}
Однако ни один из них не работал.
Вот как я вижу переход, когда изменение экземпляра currentView.