UIButton 变换后不可用

问题描述 投票:0回答:1

我使用这段代码制作了一个动态缩放的 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 更改为某个数字。

ios swift uibutton
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 已正确初始化并添加到您的视图中,因为这将确保动画可以顺利运行。

© www.soinside.com 2019 - 2024. All rights reserved.