【问题标题】:Changing animation's duration dynamically in SwiftUI在 SwiftUI 中动态更改动画的持续时间
【发布时间】:2020-08-21 09:29:24
【问题描述】:

我正在尝试在动画时更改动画的持续时间。我有两个属性-isAnimating 确定动画是否应该运行,duration。有一个正在动画的视图,切换isAnimating 的按钮和绑定到持续时间状态的滑块。当动画正在播放并且我使用 Slider 更改值时,持续时间不会改变。有什么方法可以实现我想要的吗?

struct ContentView: View {
    @State var isAnimating = false
    @State var duration = 2.0
    
    var body: some View {
        VStack {
            Spacer()
            Circle()
                .frame(width: 50.0, height: 50.0)
                .scaleEffect(isAnimating ? 2.0 : 1.0)
                .animation(
                    isAnimating ?
                        Animation.easeOut(duration: duration).repeatForever(autoreverses: false) :
                        .default
            )
            
            Spacer()
            
            Button(
                action: { self.isAnimating.toggle() },
                label: { Text("Tap") }
            )
            
            Spacer()
            
            Slider(value: $duration, in: (0.1 ... 5.0))
                .padding([.horizontal], 20.0)
                .padding([.bottom], 50.0)
        }
    }
}

我也尝试了不同的方法,但总是有一些问题(例如动画视图闪烁)。

【问题讨论】:

    标签: ios swift animation swiftui watchos


    【解决方案1】:

    如果您在动画中添加 .repeatForever() 修饰符,则动画将永远运行,顾名思义(使用给定参数)。唯一的可能是停止动画并“重新运行”一个更改了“持续时间”值的新动画。

    【讨论】:

    • 那么...如何停止并重新运行具有不同属性的新动画?
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多