Swift:如何访问@IBAction集合中的一个对象(即按钮)以将发送者返回给新函数?
问题描述:
我正在创建一个简单的计算器,我在@IBAction中放了几个数字按钮。我访问按下的按钮的sender.title更新输入标签是这样的:Swift:如何访问@IBAction集合中的一个对象(即按钮)以将发送者返回给新函数?
@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访问它,就不必一次又一次地重新编写代码,但我不知道如何将“发件人”转移到新功能。 那么我怎么会告诉新功能(让我们叫它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:,如果你需要从不同控制器调用这个函数,可以考虑将它的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)
}
感谢。我没有想到扩展。这效果很好! – RjC