2017-10-16 63 views
0

我正在创建一个简单的计算器,我在@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)...将知道哪个按钮动画?

感谢

回答

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) 
    } 
+0

感谢。我没有想到扩展。这效果很好! – RjC

相关问题