为啥我的 Button 背景层会出现动画,我该如何阻止它?

Posted

技术标签:

【中文标题】为啥我的 Button 背景层会出现动画,我该如何阻止它?【英文标题】:Why does my UIButton's background layer animate in, and how can I stop it?为什么我的 Button 背景层会出现动画,我该如何阻止它? 【发布时间】:2014-10-14 02:31:12 【问题描述】:

我有一个自定义的 UIButton 子类,当我设置背景层的 hidden 属性时,它会将 alpha 从 0 设置为 1。我想要从 0 到 1 的瞬时跳转。为什么要设置动画以及如何设置动画我应该阻止它这样做吗?

这是我的代码:

private var subLayer: CALayer!

override func awakeFromNib() 
    super.awakeFromNib()

    addTarget(self, action: "touchedDown", forControlEvents: .TouchDown)
    addTarget(self, action: "canceledTouch", forControlEvents: .TouchUpInside | .TouchUpOutside | .TouchDragExit | .TouchCancel)


override func updateConstraints() 
    super.updateConstraints()

    // Add a background layer that is tight to the text in the button to indicate the button being pressed
    subLayer = CALayer()
    subLayer.frame = CGRectInset(bounds, -4.0, 5.0)
    subLayer.backgroundColor = UIColor(red: 204/255.0, green: 232/255.0, blue: 253/255.0, alpha: 1.0).CGColor
    subLayer.cornerRadius = 2.0
    subLayer.hidden = true
    layer.insertSublayer(subLayer, atIndex: 0)


func touchedDown() 
    subLayer.hidden = false


func canceledTouch() 
    subLayer.hidden = true

【问题讨论】:

【参考方案1】:

除非您禁用动画,否则核心动画中所做的一切(即“CALayer”中的“CA”)都会被动画化。

有几种方法可以禁用默认动画,但唯一适用于所有情况的方法是:

CATransaction.begin()
CATransaction.setDisableActions(true)

subLayer.hidden = false

CATransaction.commit()

【讨论】:

+1 用于开始和提交事务。所有其他答案可能在包含事务的可能不希望的时间调用setDisableActions 导致意外问题。【参考方案2】:

使用CATransaction.setDisableActions(true)禁用图层的自动动画

【讨论】:

以上是关于为啥我的 Button 背景层会出现动画,我该如何阻止它?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UI Button 正常工作,但没有动画或向用户指示?

为啥我的 SwiftUI 动画在旋转时恢复到前一帧?

半页卷曲动画背景视图颜色?

为啥 css 动画不适用于背景大小 100%

为啥 ion-nav-back-button 没有出现在我的项目中?

为啥我的图像背景在浮动:左上消失?