Задержка перехода в SwiftUI - PullRequest
1 голос
/ 18 февраля 2020

Как я могу отложить переход? Я хочу нажать на кнопку, и затем представление должно перейти с задержкой.

У меня есть следующий код, но он не синхронизирован должным образом.

struct ContentView: View {
    @State var showOne = true


    var body:some View{
        VStack{
            if showOne{
                HStack{
                    Spacer()
                    Text("One")
                    Spacer()
                }
                .animation(Animation.default.delay(2))
                .background(Color.red)
                .transition(.slide)
            }else{
                HStack{
                    Spacer()
                    Text("Two")
                    Spacer()
                }
                .background(Color.blue)
                .animation(Animation.default.delay(1))
                .transition(.slide)
            }
            Button("Toggle"){
                withAnimation(){
                    self.showOne.toggle()
                }
            }
        }
    }
}

1 Ответ

3 голосов
/ 18 февраля 2020

Если вы добавите явное 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 может привести к изменению текста перед фоном. Это может показаться ошибкой, и я рекомендую оставить отзыв об этом.

...