我试图通过创建标准动画函数来减少整个应用中使用的重复代码的冗余。
我想要的结果是带有可选完成处理程序的按钮动画。这是我的代码:
extension UIButton {
func animate(duration: TimeInterval, completion: ((Bool) -> Swift.Void)?) {
UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 6.0, options: [], animations: {
self.transform = .identity
}, completion: completion)
}
}
在 MyViewController
上,当我这样调用动画方法时,会发生 segue,但动画不会:
myButton.animate(duration: 0.25) { _ in
self.performSegue(withIdentifier: "mySequeIdentifier", sender: sender)
}
我注释掉了 self.performSegue
以确保 segue 不是硬连接到 Storyboard上,并验证它不是。
我还尝试用这段代码声明动画函数:
func animate(duration: TimeInterval, completion: @escaping (Bool)->Void?) {
UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 6.0, options: .allowUserInteraction, animations: {
self.transform = .identity
}, completion: completion as? (Bool) -> Void)
}
使用该代码,什么也不会发生。甚至没有崩溃。
感谢阅读。我欢迎您就我的错误所在提出建议。
最佳答案
它不是动画,因为我认为您在调用扩展方法之前忘记为按钮提供初始转换值。
myButton.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
myButton.animate(duration: 0.25) { _ in
self.performSegue(withIdentifier: "mySequeIdentifier", sender: sender)
}
关于ios - UIButton 动画扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46563800/