Я хотел бы создать переход, удаление которого зависит от значения @State
при удалении представления.
Вот то, что я пробовал.
Если isValid
верно когда появится представление, оно будет использовать .move(edge: .trailing)
для удаления, даже если за это время isValid
станет ложным.
Я пытаюсь получить переход .move(edge: .leading)
, если isValid
равен false
, когда представление удаляется, даже если оно было true
, когда оно было вставлено.
Проблема возникает, когда я переключаю show
и isValid
одновременно.
struct TextTransitionView: View {
@State var isValid = false
@State var show = false
var body: some View {
VStack {
Spacer()
if show {
Text("TEXT").transition(slideTransition)
}
Spacer()
Text("Move to \(isValid ? "right" : "left")")
Button("Toggle isValid") {
self.isValid.toggle()
}
Button("Toggle show") {
withAnimation { self.show.toggle() }
}
Button("Toggle isValid and show") {
withAnimation {
self.isValid.toggle()
self.show.toggle()
}
}
}
}
var slideTransition: AnyTransition {
let removal = isValid ? AnyTransition.move(edge: .trailing) : AnyTransition.move(edge: .leading)
return .asymmetric(insertion: .identity, removal: removal)
}
}