在SwiftUI中动态更改动画的持续时间

问题描述

我正在尝试更改动画的持续时间。我有两个属性-isAnimatingduration,它们确定动画是否应该运行。有一个正在制作动画的视图,一个用于切换isAnimating的按钮和一个绑定到持续时间状态的Slider。当播放动画并且我使用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)
        }
    }
}

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

解决方法

如果在动画中添加.repeatForever()修饰符,则该动画将按照其名称所含的含义永久运行(具有给定的参数)。唯一的可能性是停止动画并“重新运行”具有更改的“持续时间”值的新动画。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...