【问题标题】:Stopping rotation animations in Swift UI在 Swift UI 中停止旋转动画
【发布时间】:2020-10-20 05:29:38
【问题描述】:

我希望连续旋转 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) 或计时器 (like this answer)。如果可以的话,我希望避免使用这些解决方案——我很好奇是否有一种方法可以使用我无法弄清楚的 SwiftUI 动画来实现。

非常感谢任何帮助!

【问题讨论】:

  • 你试过改变style吗? Animation.linear.repeatForever(autoreverses: false)Animation.linear.delay(0)

标签: ios swift animation swiftui


【解决方案1】:

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

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

使用 Xcode 12 / iOS 14 测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多