Swiftui 延迟动画,而不是使用计时器

Swiftui 延迟动画,而不是使用计时器,swiftui,swiftui-animation,Swiftui,Swiftui Animation,我在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]))

我在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")
          }
       })) ...
“闪烁”方法设置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按钮实现这一点

这只适用于在.onEnded块输入时将此值设置为false的情况。现在我想在其他动画结束后用闪烁方法重置它。但是延迟修改器不适用于第三个“动画”。事实上,该值会立即设置回true,以便圆在接触时继续作出反应


不使用计时器是实现目标的唯一方法吗?

以下是声明:

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

声明如下:

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

你能告诉我们buttonOpac、buttonColor、currentNumber和blinkDuration的声明吗?你可以使用与我在@Asperi中进行缩放相同的解决方案谢谢你的缩放解决方案。为了更好地理解它是如何工作的,我必须理解动画的概念,这在()中有很好的解释。结合理论,您的解决方案很好理解,并且完全符合我的要求。您能给我们提供buttonOpac、buttonColor、currentNumber和blinkDuration的声明吗?您可以使用与我在@Asperi中进行缩放时相同的解决方案谢谢您的缩放解决方案。为了更好地理解它是如何工作的,我必须理解动画的概念,这在()中有很好的解释。与理论一起,你的解决方案很好理解,并且完全实现了我想要实现的目标。