0

我正在尝试制作一个动画,其中硬币翻转并向上移动然后返回并在按钮单击后停止。使用此代码,它会上下移动,但在动画结束后会捕捉到顶部位置。我知道这一定是因为“.offset”,但我不知道有什么办法。Youtube并没有太大帮助。

   @State private var isClicked : Bool = false

            Image(coins[numbers[0]])
                .resizable()
                .scaledToFit()
                .scaleEffect(0.6)
                .rotation3DEffect(isClicked ?
                                    .init(degrees: 1080) : .init(degrees: 0),
                                  axis: (x: 10.0, y: 0.0, z: 0.0))
                .animation(Animation.easeInOut.repeatCount(2, autoreverses: true)
                            .speed(0.5))
                .offset(y: isClicked ? -200 : 0)
            
           Button(action: {self.animation()}, label: {
                Text("FLIP!")
                    .aspectRatio(contentMode: .fit)
                    .foregroundColor(Color.black)
            })

    func animation() {
        self.isClicked.toggle()
    }
4

1 回答 1

0

您应该使用Animation.easeInOut.repeatCount(3, autoreverses: true, .speed(0.5) which hasrepeatCount(3而不是repeatCount(2. 硬币上升和下降,那就是它已经完成了您声明的 2 个重复周期。在那之后,硬币应该在顶部,但它已经完成了 2 次重复计数,所以它不能动画到顶部,它只是在没有任何动画的情况下走到顶部。使用repeatCount(3,您又添加了一个循环,因此硬币有另一个机会回到顶部并在那里结束动画。

于 2021-04-12T07:57:00.163 回答