我有以下用户界面:
Red Rectangle
旋转速度以滑块的值为基础。我使用.linear(duration:).repeatForever(autoreverses: false)
(持续时间以滑块的值为基础)和.id
修改器来实现此目的,以便在滑块的值发生变化时停止当前动画。
struct ContentView: View {
@State private var level: Double = 0
@State private var rotation: Double = 0
var body: some View {
VStack(spacing: 16) {
Rectangle().fill(.red)
.frame(width: 100, height: 100)
.id(level)
.rotationEffect(Angle(degrees: rotation))
.animation(level > 0 ? .linear(duration: 2 / level).repeatForever(autoreverses: false) : .linear(duration: 2), value: rotation)
Spacer().frame(height: 12)
Slider(value: $level, in: 0...3, step: 1)
HStack {
Text("0")
.fontWeight(.semibold)
Spacer()
Text("1")
.fontWeight(.semibold)
Spacer()
Text("2")
.fontWeight(.semibold)
Spacer()
Text("3")
.fontWeight(.semibold)
}
}
.padding(16)
.onChange(of: level, perform: { _ in
rotation += 360
})
}
}
我当前的问题是当用户更改滑块的值时,Rectangle
会重置为初始状态,因此.id
会产生故障。
以下是我的代码当前如何工作的视频链接: https: //imgur.com/a/6bsUJzm
我的问题是当用户更改滑块的值时,如何实现状态之间的平滑过渡?任何见解或建议都将不胜感激!