快速动画按钮边框

时间:2015-04-03 14:39:21

标签: swift animation

我最近学会了如何使用alpha为按钮设置动画,以便在Swift中淡入/淡出。但是,如果我只希望边框的alpha变化,那么动画似乎不起作用。相反,它"跳跃"从州到州。

UIView.animateWithDuration(1.0, delay: 0.0, options: nil, animations: {            
  var borderColor = UIColor(red: 0.41, green: 1.28, blue: 1.85, alpha: 0.0)
  self.startButton.layer.borderColor = borderColor.CGColor
}, completion: nil);

例如,上面的代码没有动画,而是产生了一个" jump"在边界的alpha 1.0和0.0之间。

但是,这样可以正常工作(更改整个按钮的alpha值):

UIView.animateWithDuration(1.0, delay: 0.0, options: nil, animations: {
  self.startButton.alpha = 1;
}, completion: nil);

有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:9)

这是一个简单的解决方案:

let borderWidth:CABasicAnimation = CABasicAnimation(keyPath: "borderWidth")
borderWidth.fromValue = 0
borderWidth.toValue = 0.9
borderWidth.duration = 0.5
yourView.layer.borderWidth = 0.5
yourView.layer.borderColor = UIColor.whiteColor().CGColor
yourView.layer.addAnimation(borderWidth, forKey: "Width")
yourView.layer.borderWidth = 0.0

它对我有用。

答案 1 :(得分:7)

您无法使用layer动画为UIView部分制作动画。另外,我认为不可能为边框的alpha值设置动画。要获得类似的效果,您可以设置边框宽度的动画:

我做了UIView分机:

extension UIView {
  func animateBorderWidth(toValue: CGFloat, duration: Double) {
    let animation:CABasicAnimation = CABasicAnimation(keyPath: "borderWidth")
    animation.fromValue = layer.borderWidth
    animation.toValue = toValue
    animation.duration = duration
    layer.add(animation, forKey: "Width")
    layer.borderWidth = toValue
  }
}

然后使用以下方法显示视图的边框:

startButton.animateBorderWidth(toValue: 1, duration: 0.3)

并使用以下隐藏它:

startButton.animateBorderWidth(toValue: 0, duration: 0.3)

答案 2 :(得分:2)

borderColorborderWidth等功能是按钮的图层的属性。这告诉您必须使用图层的核心动画 - 不要像您的代码那样查看动画 - 为这些功能设置动画。它运作得很好;在这个动画中,我演示了当您使用核心动画动画borderWidthcornerRadius时会发生什么:

enter image description here

borderColor的动画效果相似。