将CABasicAnimation添加到子类UIButton - 如果已启用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将CABasicAnimation添加到子类UIButton - 如果已启用相关的知识,希望对你有一定的参考价值。

我遇到了Autolayout和子类UIButton的问题。在我的UIButton子类中,我重写isEnabled以在启用按钮时添加颜色动画。见下文。

// Within my subclassed button:
override var isEnabled:Bool {
    didSet {
        UIChanges.colorButton(buttonToFade: self)
    }
}

// colorButton to be called from UIChanges:
static func colorButton(buttonToFade:UIView) {
    let colorAnimation = CABasicAnimation(keyPath: "backgroundColor")
    colorAnimation.duration = 1
    colorAnimation.fromValue = UIColor.black.cgColor
    colorAnimation.toValue = UIColor.white.cgColor
    colorAnimation.repeatCount = 10
    colorAnimation.autoreverses = true
    buttonToFade.layer.add(colorAnimation, forKey: nil)
}

问题是,这个动画永远不会发生。

如果启用了这个colorButton()动画,如何才能将它添加到子类按钮?

我认为这与autolayout有关,因为如果我将该函数放在layoutSubviews中,它可以正常工作。

编辑:我向View Controller添加了一个新按钮,手动将子类按钮更改为启用,以及@JD。答案工作正常(CABasicAnimation激发)。但是,如果未按下测试仪按钮,则不会触发CABasicAnimation。我试图调整的这个按钮主要在AppDelegate中启用 - 所以这可能是导致问题的原因吗?当按钮设置为启用时,未加载按钮框架? Autolayout问题?

答案

尝试在UIView或CALayer Extension中添加动画代码,然后从自定义UIButton调用函数。

class CustomButton: UIButton {

    override var isEnabled:Bool {
        didSet {
            if isEnabled {
                setTitle("Enable", for: .normal)
                layer.colorButton()
            } else {
                setTitle("Disable", for: .normal)
                layer.removeAllAnimations()
            }
        }
    }
}

extension CALayer {

    func colorButton() {
        let colorAnimation = CABasicAnimation(keyPath: "backgroundColor")
        colorAnimation.duration = 1
        colorAnimation.fromValue = UIColor.black.cgColor
        colorAnimation.toValue = UIColor.white.cgColor
        colorAnimation.repeatCount = 10
        colorAnimation.autoreverses = true
        add(colorAnimation, forKey: nil)
    }
}

enter image description here

以上是关于将CABasicAnimation添加到子类UIButton - 如果已启用的主要内容,如果未能解决你的问题,请参考以下文章

将 uib 模态内容移出模态内容到页面顶部

Core Animation (CABasicAnimation) 的不可预测行为

Objective-C - CABasicAnimation 在动画后应用更改?

iOS动画效果三:CABAsicAnimation实现平移、旋转和放大

将相同的 UIBarButtonItem 添加到几个 UIViewControllers

以编程方式将按钮添加到表格视图单元格[关闭]