为啥我的 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 正常工作,但没有动画或向用户指示?