【问题标题】:How do I add a GradientLayer to a CAShapeLayer?如何将 GradientLayer 添加到 CAShapeLayer?
【发布时间】:2021-08-26 19:24:41
【问题描述】:

我有一个需要添加渐变背景的圆形。如何将 CAGradientLayer 添加到 CAShapeLayer?

这是形状层:

    let circleLayer = CAShapeLayer()
    let circlePath = UIBezierPath(arcCenter: center, radius: 100, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)

    circleLayer.path = circlePath.cgPath
    circleLayer.strokeColor = UIColor.lightGray.cgColor
    circleLayer.lineWidth = 10
    circleLayer.fillColor = UIColor.gray.cgColor
    circleLayer.lineCap = CAShapeLayerLineCap.round

    view.layer.addSublayer(circleLayer)

我想用从上到下以及从 #444444 到 #6C6C6C 的渐变替换填充颜色。

func createGradientLayer() {
    gradientLayer = CAGradientLayer()
 
    gradientLayer.frame = self.view.bounds
 
    gradientLayer.colors = [UIColor.redColor().CGColor, UIColor.yellowColor().CGColor]
 
    self.view.layer.addSublayer(gradientLayer)
}

【问题讨论】:

  • 提示:色标位置

标签: swift linear-gradients


【解决方案1】:

使用mask?

let gradientLayer = CAGradientLayer()

gradientLayer.frame = frame // Set the Frame

gradientLayer.colors = [UIColor.yellow.cgColor,
                   UIColor.blue.cgColor] // Set the Colors

gradientLayer.startPoint = CGPoint(x: 0, y: 1)
gradientLayer.endPoint = CGPoint(x: 1, y: 0)

gradientLayer.mask = circleLayer // Set the mask

【讨论】:

  • 感谢您的快速回复。当我尝试这个时,当我尝试将框架设置为 circlePath 时,我得到一个 Xcode 错误。它说它不能将“UIBezierPath”类型的值分配给“CGRect”。任何想法如何建立框架?
  • circleLayer 还是 circlePath?
  • 使用self.view.frame
  • 我们越来越近了。我再也不能出错了,但是渐变没有显示出来。我会用它一点。感谢您迄今为止的帮助。
  • 是的,因为它位于视图层次结构的底部,我无法帮助您,因为我没有完整的代码;但希望你能解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多