【发布时间】:2017-01-20 14:22:38
【问题描述】:
这是对我昨天提出的问题的补充。结果很完美,但我想要修改。 Using drawRect to draw & animate two graphs. A background graph, and a foreground graph
以下代码基于上面的线程,生成一个 CABasicAnimation,它会生成深蓝色“三角形”。我希望它不是深蓝色纯色,而是具有 3 个停止点的 CAGradientLayer:红色/绿色/蓝色。
我尝试添加一个 CAGradientLayer 来配置渐变,然后使用 addSubLayer 将渐变添加到动画出来的 CAShapeLayer。我在下面发布的结果没有动画。颜色和形状保持不变。渐变看起来很棒,只需要动画出来:
import UIKit
import QuartzCore
import XCPlayground
let view = UIView(frame: CGRect(x: 0, y: 0, width: 521, height: 40))
view.backgroundColor = UIColor.whiteColor()
XCPlaygroundPage.currentPage.liveView = view
let maskPath = UIBezierPath()
maskPath.moveToPoint(CGPoint(x: 0, y: 30))
maskPath.addLineToPoint(CGPoint(x: 0, y: 25))
maskPath.addLineToPoint(CGPoint(x: 300, y: 10))
maskPath.addLineToPoint(CGPoint(x: 300, y: 30))
maskPath.closePath()
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.CGPath
maskLayer.fillColor = UIColor.whiteColor().CGColor
let rectToAnimateFrom = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 0, height: 40))
let rectToAnimateTo = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 97, height: 40))
let backgroundGray = CAShapeLayer()
backgroundGray.path = maskPath.CGPath
backgroundGray.fillColor = UIColor.grayColor().CGColor
let foregroundGradient = CAShapeLayer()
foregroundGradient.mask = maskLayer
foregroundGradient.backgroundColor = UIColor.clearColor().CGColor
let gradientLayer = CAGradientLayer()
gradientLayer.startPoint = CGPointMake(0, 0)
gradientLayer.endPoint = CGPointMake(1, 0)
gradientLayer.frame = maskPath.bounds
let colors = [UIColor.redColor().CGColor, UIColor.greenColor().CGColor, UIColor.blueColor().CGColor]
gradientLayer.colors = colors
foregroundGradient.addSublayer(gradientLayer)
view.layer.addSublayer(backgroundGray)
view.layer.addSublayer(foregroundGradient)
let animation = CABasicAnimation(keyPath: "path")
animation.fromValue = rectToAnimateFrom.CGPath
animation.toValue = rectToAnimateTo.CGPath
animation.duration = 2
animation.removedOnCompletion = false
animation.fillMode = kCAFillModeForwards
foregroundGradient.addAnimation(animation, forKey: nil)
我需要 foregroundGradient 对象(带有 gradientLayer 子层!)从左到右设置动画。
如果您从我上面的代码中删除渐变,并将 foregroundGradient 保持为纯色,您将看到动画效果。
【问题讨论】:
-
你能告诉我你在这里遇到什么问题吗?
-
@Dhanesh - 在第 3 段中提到。渐变看起来很完美。我需要它的确切尺寸和颜色。但是动画不起作用。看看我发布的线程。蓝色的动画从左到右,而灰色的三角形是背景。我在这里需要同样的结果,除了使用我的渐变。
标签: ios swift jquery-animate cagradientlayer