为包含 CAGradientLayer 的 UIView 设置动画
Posted
技术标签:
【中文标题】为包含 CAGradientLayer 的 UIView 设置动画【英文标题】:Animate a UIView who contains a CAGradientLayer 【发布时间】:2018-08-11 15:14:40 【问题描述】:我想修改具有 gradientLayer 的视图的宽度,但是当我添加渐变层时,这会阻止动画。
我给你看我的代码:
override func viewDidLayoutSubviews()
super.viewDidLayoutSubviews()
animateProgressBar(leftPourcentage : 64)
addGradientBarColor()
func addGradientBarColor(leftPourcentage : CGFloat)
let leftColor = UIColor(rgb: 0x00ABBD)
let rightColor = UIColor(rgb : 0x00DAFF)
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [leftColor.cgColor,
rightColor.cgColor]
gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)
gradientLayer.frame = CGRect.init(
x: userBarLeft.bounds.origin.x,
y: userBarLeft.bounds.origin.y,
width: userBarLeft.frame.width,
height: userBarLeft.frame.height)
gradientLayer.masksToBounds = false
gradientLayer.cornerRadius = 2
userBarLeft.layer.insertSublayer(gradientLayer, at: 0)
func animateProgressBar(leftPourcentage : CGFloat)
let widthOfTotalBarLeft = totalBarLeft.bounds.size.width
leftBarWidthConstr.constant = widthOfTotalBarLeft * (leftPourcentage / 100)
UIView.animate(withDuration: 2)
self.view.layoutIfNeeded()
这个给我看:
没有动画作品。
当我删除 addGradientBarColor
函数时,这告诉我:
我想要动画但带有渐变。我怎样才能做到这一点?
【问题讨论】:
您无法使用视图动画 (UIView.animate
) 为层的布局设置动画。使用渐变 view 而不是渐变层。参见例如***.com/questions/51543409/…
【参考方案1】:
这是因为您将渐变宽度设置为
width: userBarLeft.frame.width,
就这样吧
width:0,
并为其宽度设置动画
【讨论】:
感谢您的回复,当我在animate
部分添加此self.gradientLeftLayer.bounds.size.width = widthOfTotalBarLeft * (leftPourcentage / 100)
时,这不起作用。如何为 CAGradientLayer
的宽度设置动画?
在视图中嵌入渐变并为其完整帧设置动画以上是关于为包含 CAGradientLayer 的 UIView 设置动画的主要内容,如果未能解决你的问题,请参考以下文章