Как анимировать число, заключенное в View с помощью SwiftUI? - PullRequest
0 голосов
/ 07 апреля 2020

Допустим, у меня есть простое представление, а число ВНУТРИ другого представления:

struct ContentView: View {
    @State private var counter = 0
    var body: some View {
        VStack {
            Button(action: { self.counter += 1 }) {
                Text("Add 1")
            }
            NumberView(currentValue: counter)
        }
    }
}

struct NumberView: View {
    var currentValue: Int

    var body: some View {
        VStack {
            Text("I don't want to be animated")
            Text(currentValue.description)
                .font(.largeTitle)
                .foregroundColor(Color.black)
                .padding(.all)
        }
     }
}

Для каждого клика я хочу, чтобы число увеличивалось на секунду и go возвращалось как обычно. (Использование эффекта масштаба). Как я могу оживить это масштабирование на секунду?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

хорошо, вот новый ответ для вашего измененного требования

struct ContentView: View {
    @State private var counter = 0
    @State var scale : CGFloat = 1
    var body: some View {
        VStack {
            Button(action: {
                self.counter += 1
                withAnimation(Animation.easeInOut(duration: 0.5))  {
                    self.scale = 1.5
                    Timer.scheduledTimer(withTimeInterval: 0.5, repeats: false) { (timer) in
                        withAnimation(Animation.easeInOut(duration: 0.5))  {
                            self.scale = 1
                        }
                    }
                }
            }) {
                Text ("add")
            }
            NumberView(currentValue: counter, scale: self.scale)
        }
    }
}

struct NumberView: View {
    var currentValue: Int
    var scale : CGFloat

    var body: some View {
        VStack {
            Text("I don't want to be animated")
            Text(currentValue.description)
                .font(.largeTitle)
                .foregroundColor(Color.black)
                .padding(.all)
                .scaleEffect(self.scale)
        }
     }
}
1 голос
/ 07 апреля 2020

попробуйте это:

struct ContentView: View {
    @State private var counter = 0

    @State var scale = false

    var body: some View {
        VStack {
            Button(action: {
                self.counter += 1
                withAnimation(Animation.easeInOut(duration: 0.5))  {
                    self.scale.toggle()
                    Timer.scheduledTimer(withTimeInterval: 0.5, repeats: false) { (timer) in
                        withAnimation(Animation.easeInOut(duration: 0.5))  {
                            self.scale.toggle()
                        }
                    }
                }
            }) {
                Text("Add 1")
            }
            NumberView(currentValue: counter)
                .scaleEffect(scale ? 1.5 : 1)
        }
    }
}

struct NumberView: View {
    var currentValue: Int

    var body: some View {
        Text(currentValue.description)
            .font(.largeTitle)
            .foregroundColor(Color.black)
            .padding(.all)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...