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)
}
我正在创建一个简单的计算器,我在@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)
}