Пользовательский класс UIButton для события касания кнопки - PullRequest
0 голосов
/ 03 июля 2018

Можно ли создать пользовательский класс 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)

     }
  }

Так что я не хочу создавать действие в ViewController, в котором должна вызываться button.buttonTouched (). Это должно происходить автоматически каждый раз, когда я использую этот класс во всех UIButton.

Есть ли возможность сделать что-то подобное?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Хотя подклассы 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. Надеюсь, это поможет

0 голосов
/ 03 июля 2018

Создайте пользовательский класс кнопки следующим образом

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 

    }
}
...