Я пытаюсь создать несколько переходов внутри ZStack.
Это тестовое представление с некоторым текстом и кружком, каждый из которых имеет свой собственный переход.
struct Test: View {
@Binding var isPresented: Bool
@State private var showCircle: Bool = false
@State private var showRect: Bool = false
var body: some View {
ZStack {
if showRect {
VStack {
Text("Hello World")
.foregroundColor(.white)
.padding()
}
.background(Color.green)
.transition(.move(edge: .bottom))
}
if showCircle {
Circle()
.fill(Color.purple)
.transition(.slide)
}
}
.onAppear() {
withAnimation {
self.showRect.toggle()
self.showCircle.toggle()
}
}
.onDisappear() {
withAnimation {
self.showCircle.toggle()
self.showRect.toggle()
}
}
}
}
Я добавляю это представление следующим образом:
struct ContentView: View {
@State private var toggler: Bool = false
var body: some View {
ZStack {
if toggler {
Test(isPresented: $toggler)
}
Button("Show/Hide") {
withAnimation {
self.toggler.toggle()
}
}
}
}
}
переходы работают на Appar.
Но OnDisappear, кажется, вызывается во время удаления, а не раньше.
Как я могу сбросить переменные состояния, чтобы инициировать переходы при удалении, или какой другой подход я должен использовать?
Другие попытки:
Я также пытался создать собственные модификаторы, чтобы использовать их с Anytransition.modifier - но не получилось, потому что я не мог выполнить тип для доступа к состоянию vars, а Anytransition.modifier требуетмодификаторы, чтобы соответствовать ViewModifier.
функция dismiss внутри TestView, которая работает, если я хочу отключить представление от самого себя, но, очевидно, нет, когда оно отклоняется его родителем.