Как сделать эффект отскока для кнопки
Я пытаюсь сделать эффект отскока для отображаемой кнопки. Я хочу, чтобы моя кнопка сделала что-то вроде этого
Как создать анимацию отказов UIView?
Я делаю это с этим кодом, но это не жидкость...
UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: ({
self.image.center.y = self.view.frame.height / 4
}), completion: nil)
UIView.animateWithDuration(0.7, delay: 0.2, usingSpringWithDamping: 1, initialSpringVelocity: 0.8, options: [], animations: ({
self.image.center.y = self.view.frame.height / 6
}), completion: nil)
UIView.animateWithDuration(0.9, delay: 0.4, usingSpringWithDamping: 1, initialSpringVelocity: 0.6, options: [], animations: ({
self.image.center.y = self.view.frame.height / 4
}), completion: nil)
UIView.animateWithDuration(1, delay: 0.6, usingSpringWithDamping: 1, initialSpringVelocity: 0.4, options: [], animations: ({
self.image.center.y = self.view.frame.height / 5.5
}), completion: nil)
UIView.animateWithDuration(1.05, delay: 0.8, usingSpringWithDamping: 1, initialSpringVelocity: 0.2, options: [], animations: ({
self.image.center.y = self.view.frame.height / 4
}), completion: nil)
2 ответа
Вместо того, чтобы вкладывать все анимации в первый блок анимации, поместите каждую последующую анимацию в обработчик завершения предыдущего.
Хотя я бы рекомендовал использовать Core Animation для чего-то подобного, в отличие от метода UIView animateWithDuration.
Вы можете использовать приведенный ниже класс для простоты использования
class BounceButton: UIButton {
@IBInspectable var baseColor: String = "2"{
didSet {
//layer.borderColor = borderColor.CGColor
if baseColor == "1" {
self.backgroundColor = UIColor.MiTheme.BtnColorPrimary
self.setTitleColor(UIColor.white, for: .normal)
self.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17)
}
else if baseColor == "2" {
self.backgroundColor = UIColor.MiTheme.BtnColorSecond
self.setTitleColor(UIColor.black, for: .normal)
}
else if baseColor == "3" {
self.backgroundColor = UIColor.black
self.setTitleColor(UIColor.white, for: .normal)
self.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17)
}
else if baseColor == "4" {
}
}
}
override init(frame: CGRect) {
super.init(frame: frame)
//self.layer.cornerRadius = 28.5
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//self.layer.cornerRadius = 28.5
}
// Add some animations on button click
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
// Scale up the button
self.transform = CGAffineTransform(scaleX: 1.1, y: 1.1)
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 6, options: .allowUserInteraction, animations: {
// Reset the sizes to defaults
self.transform = CGAffineTransform.identity
}, completion: nil)
}
}