在 SwiftUI 中动态更改动画的持续时间
Posted
技术标签:
【中文标题】在 SwiftUI 中动态更改动画的持续时间【英文标题】:Changing animation's duration dynamically in 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)
我也尝试了不同的方法,但总是有一些问题(例如动画视图闪烁)。
【问题讨论】:
【参考方案1】:如果您在动画中添加 .repeatForever() 修饰符,则动画将永远运行,顾名思义(使用给定参数)。唯一的可能是停止动画并“重新运行”一个更改了“持续时间”值的新动画。
【讨论】:
那么...如何停止并重新运行具有不同属性的新动画?以上是关于在 SwiftUI 中动态更改动画的持续时间的主要内容,如果未能解决你的问题,请参考以下文章