Animation 有没有更好的方法在swiftui中实现抖动动画?
当用户尝试登录时,我试图让一个按钮在没有填写所有文本字段的情况下晃动,这就是我到目前为止遇到的情况:Animation 有没有更好的方法在swiftui中实现抖动动画?,animation,button,swiftui,Animation,Button,Swiftui,当用户尝试登录时,我试图让一个按钮在没有填写所有文本字段的情况下晃动,这就是我到目前为止遇到的情况: struct Shake: GeometryEffect { var amount: CGFloat = 10 var shakesPerUnit = 3 var animatableData: CGFloat func effectValue(size: CGSize) -> ProjectionTransform { Projectio
struct Shake: GeometryEffect {
var amount: CGFloat = 10
var shakesPerUnit = 3
var animatableData: CGFloat
func effectValue(size: CGSize) -> ProjectionTransform {
ProjectionTransform(CGAffineTransform(translationX:
amount * sin(animatableData * .pi * CGFloat(shakesPerUnit)),
y: 0))
}
}
struct Correct: View {
@State var attempts: Int = 0
var body: some View {
VStack {
Rectangle()
.fill(Color.pink)
.frame(width: 200, height: 100)
.modifier(Shake(animatableData: CGFloat(attempts)))
Spacer()
Button(action: {
withAnimation(.default) {
self.attempts += 1
}
}, label: { Text("Login") })
}
}
}
然而,这对于按钮来说是特别无用的,即使这样,动画看起来也非常不好,因为它非常机器人化。有人能给我一个改进建议,让我的按钮可以摇动吗?试试这个
struct ContentView: View {
@State var selected = false
var body: some View {
VStack {
Button(action: {
self.selected.toggle()
}) { selected ? Text("Deselect") : Text("Select") }
Rectangle()
.fill(Color.purple)
.frame(width: 200, height: 200)
.offset(x: selected ? -30 : 0)
.animation(Animation.default.repeatCount(5).speed(6))
}
}
}
这很好,但在动画完成时不会重置
矩形()
的偏移量。可以在此处找到这样一个示例: