我最近学会了如何使用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);
有什么方法可以解决这个问题吗?
答案 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)
borderColor
和borderWidth
等功能是按钮的图层的属性。这告诉您必须使用图层的核心动画 - 不要像您的代码那样查看动画 - 为这些功能设置动画。它运作得很好;在这个动画中,我演示了当您使用核心动画动画borderWidth
和cornerRadius
时会发生什么:
borderColor
的动画效果相似。