使用 Swift 3 为 iOS 中的 UIButton 设置“背景颜色”动画

Posted

技术标签:

【中文标题】使用 Swift 3 为 iOS 中的 UIButton 设置“背景颜色”动画【英文标题】:Animate the 'backgroundColor' for a UIButton in iOS using Swift3 【发布时间】:2016-12-15 11:44:07 【问题描述】:

我想为我的 UIButtons 的 backgroundColor 属性设置动画,但我不知道从哪里开始。我从来没有使用过Core Animation,我不确定我是否需要它来做一些基本的事情?

我使用类和方法为按钮设置样式,如下所示:

redTheme.swift

    func makeRedButton()     
        self.layer.backgroundColor = myCustomRedcolor  
    

【问题讨论】:

【参考方案1】:

您可以使用UIView Animation 执行此操作,如下所示:

注意:在执行动画之前不要忘记将背景设置为清除,否则它将无法正常工作。那是因为动画需要一个起点和终点,起点是清晰的红色。或者 alpha 0 到 alpha 1 或者相反。

let button = UIButton(frame: CGRect(x: 0, y: 100, width: 50, height: 50))
button.layer.backgroundColor = UIColor.clear.cgColor
self.view.addSubview(button)

        func makeRedButton() 

            UIView.animate(withDuration: 1.0) 
                button.layer.backgroundColor =  UIColor.red.cgColor
            

        

【讨论】:

【参考方案2】:

Swift 4 - 一种简单的方法来为您的 UIButton 或任何其他 UIView 上的任何更改设置动画:

UIView.transition(with: button, duration: 0.3, options: .curveEaseInOut, animations: 
  self.button.backgroundColor = .red
  self.button.setTitle("ERROR", for: .normal)
  self.button.setTitleColor(.white, for: .normal)
)

【讨论】:

设置标题颜色没有动画效果【参考方案3】:

出于某种原因动画 button.layer.backgroundColor 对我的自定义 uibutton 的影响为零,因此我像这样为 alpha 设置动画:

func provideVisualFeedback(_ sender:UIButton!)

    sender.backgroundColor = UIColor.whatever
    sender.alpha = 0
    UIView .animate(withDuration: 0.1, animations: 
        sender.alpha = 1
    , completion:  completed in
        if completed 
            sender.backgroundColor = UIColor.white
        
    )

然后

@IBAction func buttonAction(_ sender:NumberPadButton!)

    provideVisualFeedback(sender)
    do your thing once animation was setup with the helper above

【讨论】:

以上是关于使用 Swift 3 为 iOS 中的 UIButton 设置“背景颜色”动画的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8 / Swift 3 中的 iOS 异步单元测试(waitForExpectations 失败)

使用swift 3将plist中的长段文本读取为特定格式

使用swift 3更改iOS中的按钮标题不起作用

iOS swift 3中的内存泄漏

堆栈视图中的自动约束冲突、Swift 2、iOS 9.3、XCode 7

使用 Swift 3 在 iOS 10 中将图像从服务器加载到 Apple Map 中的注释视图