是否可以创建一个带有触摸事件动画的自定义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中使用此类时,这应该自动发生。
是否有可能做类似的事情?
答案 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
}
}