Как вернуть скрин в исходное состояние после использования .onTapGesture? SwiftUI
У меня есть задание: сделать анимацию контура круга, который увенчивается и возвращается к исходному размеру и одновременно с этим его наполнение сокращается пока контур круга полностью не исчезнет и с этим проблемы у меня нет, это работает. Одновременно с началом анимации у меня должен поменяться еще несколько параметров, в том числе цвет бекграунда всего вью, с этим тоже проблем нет. Но вот к концу анимации задание требует, чтобы ряд измененных параметров вернулся в исходное состояние, то есть состояние круга и цвет фона вернулись в тот же вид что и до активации анимации. Я принял решение реализовать все через .onTapGesture, после касания к елементу запускается анимация, меняется цвет фона вью, но вот как вернуть эти параметры назад после изменения я уже не понимаю, подскажите как быть?
import SwiftUI
struct Stack: View {
@State private var fill: CGFloat = 1.0
@State private var scale: CGFloat = 1.0
@State private var bacgroundColor: Color = .white
var body: some View {
ZStack {
Color(uiColor: UIColor(bacgroundColor)).edgesIgnoringSafeArea(.all)
ZStack{
Circle()
.stroke(Color(asset: Asset.Colors.secondaryActionButtonBackgroundColor), style: StrokeStyle(lineWidth: 16, lineCap: .round))
Circle()
.trim(from: 0.001, to: self.fill)
.stroke(Color(.blue), style: StrokeStyle(lineWidth: 16, lineCap: .round))
.rotationEffect(.degrees(-90))
.animation(.linear(duration: 9))
}
.scaleEffect(scale)
.padding(.horizontal, 106)
}
.onTapGesture {
self.bacgroundColor = .green
self.fill -= 1.0
let baseAnimation = Animation.easeInOut(duration: 1.0)
let repeated = baseAnimation.repeatCount(9, autoreverses: true)
withAnimation(repeated) {
self.scale = 1.5
}
}
}}
struct Stack_Previews: PreviewProvider {
static var previews: some View {
Stack()
}
}
Как мне после завершения анимации вернуть значение self.bacgroundColor, self.fill и self.bacgroundColor к их изначальным значениям после однократного нажатия на .onTapGesture?