按钮触摸事件的自定义UIButton类

时间:2018-07-03 15:36:37

标签: ios swift uibutton uiviewanimation

是否可以创建一个带有触摸事件动画的自定义UIButton类,每次用户触摸按钮时都会自动调用该动画?

 import UIKit

 class AnimatedButton: UIButton {

     @objc private func buttonClicked(sender: UIButton) {

              UIView.animate(withDuration: 0.5,
                             delay: 1.0,
                             usingSpringWithDamping: 1.0,
                             initialSpringVelocity: 0.2,
                             options:  .curveEaseOut,
                             animations: {
                                 //do animation
                                 sender.transform = CGAffineTransform(scaleX: 0.6, y: 0.6)
                             },
                             completion: nil)

     }
  }

因此,我不想在必须调用button.buttonTouched()的ViewController中创建动作。每当我在所有UIButton中使用此类时,这应该自动发生。

是否有可能做类似的事情?

2 个答案:

答案 0 :(得分:1)

尽管我不希望使用子集UIButton,但是可以通过覆盖UIButton

来实现通过子类sendAction(_ action: Selector, to target: Any?, for event: UIEvent?)为按钮实现的动画效果

根据UIControl类中的注释(UIButton继承自UIControl

  

发送动作。第一个方法被称为事件,是   您可以观察或覆盖行为的点

class MyButton : UIButton {
    override func sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) {
        debugPrint("Am here")
        //do all your animation stuff here
        super.sendAction(action, to: target, for: event)
    }
}

因此,每当点击按钮时,将执行动画,然后调用IBAction。希望这会有所帮助

答案 1 :(得分:0)

像这样创建按钮的自定义类

class CustomButton:UIButton {

    override init(frame: CGRect) {
        super.init(frame: frame)
        configeBtn()
    }

    required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
        configeBtn()
    }

    func configeBtn() {

        self.addTarget(self, action: #selector(btnClicked(_:)), for: .touchUpInside)

    }

    @objc func btnClicked (_ sender:UIButton) {

        // animate here 

    }
}