我使用这段代码制作了一个动态缩放的 UIButton
func animateOverlayImage() {
overlayButton.transform = CGAffineTransform(scaleX: 3.3, y: 3.3)
// 执行动画
UIView.animate(withDuration: 0.8,
delay: 0,
options: [.autoreverse, .repeat], // 反向和循环
animations: {
// 图片放大
self.overlayButton.transform = CGAffineTransform(scaleX: 6.0, y: 6.0)
}, completion: nil)
}
但是这个按钮不起作用,点击后没有任何反应。 我修改这段代码如下:
func animateOverlayImage() {
overlayButton.imageView?.transform = CGAffineTransform(scaleX: 3.3, y: 3.3)// from change button itself to change its imageView
// 执行动画
UIView.animate(withDuration: 0.8,
delay: 0,
options: [.autoreverse, .repeat], // 反向和循环
animations: {
// 图片放大
self.overlayButton.imageView?.transform = CGAffineTransform(scaleX: 6.0, y: 6.0) // same
}, completion: nil)
}
现在我的代码可以工作了,但是又出现了另一个问题。 我希望比例从 3.3 更改为 6.0,但看起来像是从 1.0 更改为某个数字。
在您的代码中,当动画开始时,它从当前比例开始,这就是比例看起来从 1.0 而不是 3.3 开始的原因。要实现从 3.3 到 6.0 的平滑过渡,请将动画块外部的初始比例设置为 3.3,然后仅将更改动画化为 6.0。
调整方法如下:
func animateOverlayImage() {
// Set initial scale
overlayButton.imageView?.transform = CGAffineTransform(scaleX: 3.3, y: 3.3)
// Perform animation
UIView.animate(withDuration: 0.8,
delay: 0,
options: [.autoreverse, .repeat],
animations: {
// Animate to 6.0 scale
self.overlayButton.imageView?.transform = CGAffineTransform(scaleX: 6.0, y: 6.0)
}, completion: nil)
}
通过在动画开始之前设置初始比例,动画将从 3.3 平滑过渡到 6.0。另外,请确保 overrideButton 已正确初始化并添加到您的视图中,因为这将确保动画可以顺利运行。