如何获得执行动画的按钮?

时间:2019-07-11 14:17:20

标签: ios swift animation button

我创建了一个@IBAction函数,用于将视图控制器中的按钮连接到主故事板上。目的是让我的按钮执行摇动动画,但我不知道如何连接它。我收到错误声明仅在extension UIButton {行的文件范围内有效。我需要摆脱扩展名吗?移动其他线吗?如何获取动画按钮?在显示的下面有更多代码可以运行mapkit,我需要创建另一个类吗?

我尝试完全删除扩展名,将名称重命名为UIButton之前的名称,并将UIButton()更改为其他名称,尝试查看教程,但没什么完全适合我的情况。

//button
@IBAction func diceButton(_ sender: UIButton) {
    //shake button


    //shake
    extension UIButton {

        func buttonshake() {
            let shake = CABasicAnimation(keyPath: "position")
            shake.duration = 0.1
            shake.repeatCount = 2
            shake.autoreverses = true

            let fromPoint = CGPoint(x: center.x - 5, y: center.y)
            let fromValue = NSValue(cgPoint: fromPoint)

            let toPoint = CGPoint(x: center.x + 5, y: center.y)
            let toValue = NSValue(cgPoint: toPoint)

            shake.fromValue = fromValue
            shake.toValue = toValue

            layer.add(shake, forKey: nil)

        }
    }

}

错误在// shake下的行上发生,并且无其他地方。这全都是按钮的作用,我的代码中没有任何其他按钮,所以我看不到任何可能重复的东西。

1 个答案:

答案 0 :(得分:0)

您需要将extension移到顶层,而不是任何funcclass定义。

最佳做法是创建一个新文件,将其命名为UIButton+Shake.swift,然后将扩展名放入其中。

然后,在IBAction中,只需调用buttonshake


UIButton + Shake.swift

extension UIButton {

    func buttonshake() {
        let shake = CABasicAnimation(keyPath: "position")

        // And all the other stuff

        layer.add(shake, forKey: nil)
    }
}

YourController.swift

class YourController : UIViewController {
    // ...
    @IBAction func diceButton(_ sender: UIButton) {
        sender.buttonshake()
    }
}