анимация автоматической задержки swiftUI через 2 секунды - PullRequest
1 голос
/ 28 мая 2020

привет, ребята, я изучаю swiftUI, и у меня возникла проблема с моим проектом.

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

когда я нажимаю любую из 5 кнопок для поворота карты, я хочу, чтобы карта автоматически поворачивалась на карте назад через 2 секунды c .

вот мой код:

import SwiftUI


struct CardBack: View {
    var body: some View {

      Image("back_card")
        .resizable()
        .aspectRatio(contentMode: .fit)
        .frame(width: 250)
    }
}

struct ContentView: View {

   @State var flipped = false
   @State private var cardsFront = ["bigCard1", "bigCard2", "bigCard3", "bigCard4", "bigCard5" ]
   @State private var cardBack = "back_card"

    var body: some View {
        VStack {
            Spacer()
            ZStack {

            Image(flipped ? self.cardsFront.randomElement()! : self.cardBack)
              .resizable()
              .aspectRatio(contentMode: .fit)
              .frame(width: 250)
              .rotation3DEffect(Angle(degrees: flipped ? 180 : 0 ), axis: (x: 0, y: 1, z: 0))
            }

            Spacer()
            HStack {
                Button(action: {
                    withAnimation(.spring()) {
                        self.flipped.toggle()
                    }

                }) {
                    Image("circle")
                        .renderingMode(.original)
                }


                Button(action: {

                }) {
                    Image("plus")
                        .renderingMode(.original)
                }

                Button(action: {

                }) {
                    Image("wave")
                        .renderingMode(.original)
                }

                Button(action: {

                }) {
                    Image("square")
                        .renderingMode(.original)
                }

                Button(action: {

                }) {
                    Image("star")
                        .renderingMode(.original)
                }

            }
            Spacer()
        }

    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

1 Ответ

1 голос
/ 28 мая 2020

Вот демо по одной кнопке

Button(action: {
    withAnimation(.spring()) {
        self.flipped.toggle()
    }
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
        withAnimation(.spring()) {
            self.flipped.toggle()
        }
    }
}) {
    Image("circle")
        .renderingMode(.original)
}
...