animation - 有没有更好的方法在 swiftui 中实现摇动动画?

标签 animation button swiftui

当用户尝试在未填写所有文本字段的情况下登录时,我试图让按钮震动,这就是我目前遇到的情况:

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))
        }
    }
}

关于animation - 有没有更好的方法在 swiftui 中实现摇动动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61619013/

相关文章:

iphone - 通过第一响应者更改保持 iPhone 键盘对齐的工具栏可见?

swift - 分段选择器移除了可访问性

arrays - 在 SwiftUI 中的 forEach 期间将文本字段输入添加到数组

jquery - 在页面卸载/浏览器关闭之前运行动画

ios - 动画 block 动画中的 UITableViewCell 背景颜色

java - 顶部带有 JComponents 的动画

android - 自定义按钮栏中按钮之间的分隔符

c# - 为什么这个按钮的 OnClick 事件只工作一次?

java - 使用按钮滚动后如何返回到 Activity 顶部?

ios - 在范围内找不到类型 GIDSignInDelegate