我在swiftui中有几个圈子,它们对触摸手势做出反应。我希望他们增加 opac 值,然后再次减少它:
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 动画 opac 值的变化:
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 来实现
这只适用于这一点,即在进入 .onEnded 块时将此值设置为 false。现在我想在其他动画结束后用眨眼方法重置它。但是延迟修饰符不适用于第三个“动画”。事实上,该值立即设置回 true,以便圆圈继续对触摸做出反应。
是在不使用计时器的情况下达到目标的唯一方法吗?