我创建了一个@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下的行上发生,并且无其他地方。这全都是按钮的作用,我的代码中没有任何其他按钮,所以我看不到任何可能重复的东西。
答案 0 :(得分:0)
您需要将extension
移到顶层,而不是任何func
或class
定义。
最佳做法是创建一个新文件,将其命名为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()
}
}