在Swift UI中停止旋转动画

时间:2020-10-20 05:29:38

标签: ios swift animation swiftui

我希望连续旋转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”变量将动画样式更改为.none(如果为false),或者将其更改旋转数。我知道对此有笨拙的解决方案,例如使用CBAnimation (like this answer)或计时器(like this answer)。我希望能避免这些解决方案-我很好奇是否有一种方法可以使用我一直无法弄清楚的SwiftUI动画来实现。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要将动画重置为默认值,如下所示

demo

Text("wheee")
    .rotationEffect(.degrees(go ? 360 : 0))
    .animation(go ? style : .default)        // << here !!

通过Xcode 12 / iOS 14测试