Swift:如何访问@IBAction 集合中的一个对象(即按钮)到return 新函数的发送者?

Swift: How to access one object (ie. a button) within a @IBAction collection to return a sender to a new function?

我正在创建一个简单的计算器,我在@IBAction 中放置了几个数字按钮。我访问按下按钮的 sender.title 来更新输入标签,如下所示:

 @IBAction func numberButtonTapped(_ sender: UIButton) {
        guard let numberButton = sender.title(for: .normal) else {return}

        updateInput(num: numberButton)
    }

现在我想用一个简单的 CGAFFineTransform 为每个按下的按钮设置动画(我知道这是如何完成的),我可以将动画放入 @IBAction 中,显然这是可行的:

 @IBAction func numberButtonTapped(_ sender: UIButton) {
        guard let numberButton = sender.title(for: .normal) else {return}

        sender.transform = CGAffineTransform(scaleX: 1.2, y: 1.2) // completion handler to reverse the animation

        updateInput(num: numberButton)
    }

但我想把动画放到另一个函数中,这样我就可以从不同的@IBActions 访问它,而不必一次又一次地重写代码,但我不知道如何转移"sender" 到新功能。 那么我如何告诉新函数(让我们称之为 animateButton() )哪个发送者被按下以便 sender.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)... 知道要为哪个按钮设置动画吗?

谢谢

创建一个接收 UIButton 作为参数的函数,其中包含您的动画代码:

func animateButton(anySender: UIButton) {
    // Your animation code here
    sender.transform = CGAffineTransform(scaleX: 1.2, y: 1.2) // completion handler to reverse the animation
}

在任何需要动画的函数中调用您的动画,将您的发送者作为参数传递:

@IBAction func numberButtonTapped(_ sender: UIButton) {
        guard let numberButton = sender.title(for: .normal) else {return}

        animateButton(anySender: sender)
        updateInput(num: numberButton)
    }

EXTRA: 如果您需要从不同的 controllers 调用此函数,请考虑将其设为 extension:

extension UIButton {
    func customAnimate() {
        // Your animation code here
        self.transform = CGAffineTransform(scaleX: 1.2, y: 1.2) // completion handler to reverse the animation
    }
}

并通过任意按钮调用它:

@IBAction func numberButtonTapped(_ sender: UIButton) {
        guard let numberButton = sender.title(for: .normal) else {return}

        sender.customAnimate()
        updateInput(num: numberButton)
    }