2017-10-16 64 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

相關問題