停止Swift UI中的旋转动画

我希望连续旋转Swift UI视图,直到用户按下按钮,然后停止,直到再次按下。从像this one这样的一些资源中,我认为这段代码可以工作:

struct ContentView: View {
    @State var go = false
    let style = Animation.linear.repeatForever(autoreverses: false)

    var body: some View {
        VStack {
            Button("Rotate") {
                go.toggle()
            }
            Text("wheee")
                .rotationEffect(.degrees(go ? 360 : 0))
                .animation(style)
        }
    }
}

我期望“旋转”按钮开始和停止旋转。它开始很好,但它不会停止-取而代之的是视图开始来回抽动,只会变得更糟,你按下按钮越多。

我已经尝试了一些变体,比如让“go”变量在false时将动画样式更改为.none,或者让它更改旋转的数量。我知道有一些笨拙的解决方案,比如使用CBAnimation (like this answer)或timer (like this answer)。我希望尽可能避免这些解决方案--我很好奇是否有一种方法可以使用SwiftUI动画来实现这一点,但我还没有弄明白。

任何帮助都是非常感谢的!

转载请注明出处:http://www.xinxianzhihui.com/article/20230526/1161411.html