我在swiftui中有几个圆圈,它们对触摸手势有反应。 我希望他们增加不透明度值,然后再降低它:
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")
}
})) ...
眨眼方法可以使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,以便圆圈继续对触摸产生反应。
是不使用计时器即可达到目标的唯一方法吗?
答案 0 :(得分:0)
以下是声明:
enum buttonColor: Int {
case red
case blue
case green
case yellow }
let blinkDuration = 0.5
@State private var buttonOpac: [Double] = [0.5, 0.5, 0.5, 0.5]
@State private var currentNumber = 0