У меня есть несколько кругов в swiftui, которые реагируют на прикосновение. Я хочу, чтобы они увеличили значение opa c и затем снова уменьшили его:
HStack {
Spacer(minLength: 20.0)
Circle()
//#e74c3c
.foregroundColor(Color(red: 231.0/255.0, green: 76.0/255.0, blue: 60.0/255.0, opacity: buttonOpac[buttonColor.red.rawValue]))
.gesture(TapGesture()
.onEnded({if self.buttonActive {
self.buttonActive = false
self.blink(buttonColor.red)
} else {
print("button inactive")
}
})) ...
метод blink оживляет изменение значения opa c:
func blink(_ buttonCol: buttonColor) {
self.currentNumber += 1
withAnimation(.easeOut(duration: blinkDuration)){
self.buttonOpac[buttonCol.rawValue] = 1.0
}
withAnimation(Animation.easeIn(duration: blinkDuration).delay(blinkDuration)){
self.buttonOpac[buttonCol.rawValue] = 0.5
}
withAnimation(Animation.linear.delay(2 * blinkDuration)){
self.buttonActive = true
}
}
Для когда эта анимация активна, я хочу, чтобы круг был отключен и не реагировал на прикосновения. Я попытаюсь достичь этого с помощью @Status var buttonActive
. Это работает только до такой степени, что это значение устанавливается равным false при входе в блок .onEnded. Теперь я хочу сбросить его в методе blink после окончания других анимаций. Но модификатор задержки не работает для третьей «анимации». Фактически значение сразу же устанавливается обратно в true, чтобы круг продолжал реагировать на прикосновения.
Является ли единственный способ достичь цели без использования таймеров?