Если вы добавите явное id
, оно будет работать так, как вам бы хотелось. Обратите внимание, что я сделал только одну задержку анимации, чтобы сделать ее более очевидной.
struct ContentView: View {
@State var showOne = true
var body:some View {
VStack {
if showOne {
HStack {
Spacer()
Text("One")
Spacer()
}
.background(Color.red)
.id("one")
.animation(Animation.default)
.transition(.slide)
} else {
HStack {
Spacer()
Text("Two")
Spacer()
}
.background(Color.blue)
.id("two")
.animation(Animation.default.delay(2))
.transition(.slide)
}
Button("Toggle") {
withAnimation {
self.showOne.toggle()
}
}
}
}
}
Я обнаружил, что явный id
полезен в большинстве случаев, когда я хочу использовать переход. В вашем примере неиспользование id
может привести к изменению текста перед фоном. Это может показаться ошибкой, и я рекомендую оставить отзыв об этом.