CGRect未与渐变子层一起出现

时间:2019-06-29 10:23:18

标签: swift

CGRect与梯度子层不同时出现,一个或另一个

仅绘制渐变层或仅绘制矩形即可。

    guard let ctx = UIGraphicsGetCurrentContext() else { fatalError() }
    ctx.setFillColor(red: 1, green: 0.5, blue: 0.5, alpha: 1)
    let segment1 = CGRect(x: 20, y: 110, width: 30, height: 10)
    ctx.fill(segment1)

    let gradient = CAGradientLayer()
    gradient.frame = bounds
    gradient.colors = [UIColor.init(displayP3Red: 0.29, green: 0.56, blue: 1.0, alpha: 1).cgColor, UIColor.init(displayP3Red: 0.23, green: 0.19, blue: 0.8, alpha: 1).cgColor]
    layer.insertSublayer(gradient, at: 0)

我希望它们都能以正确的顺序出现

1 个答案:

答案 0 :(得分:1)

使用:gradient.render(in: ctx)而不是layer.insertSublayer(gradient, at: 0并在其后绘制segement1:(假设您正在自定义视图类中进行此操作)

class customView: UIView {
    override func draw(_ rect: CGRect) {
        guard let ctx = UIGraphicsGetCurrentContext() else { fatalError() }

        let gradient = CAGradientLayer()
        gradient.frame = bounds
        gradient.colors = [UIColor.init(displayP3Red: 0.29, green: 0.56, blue: 1.0, alpha: 1).cgColor, UIColor.init(displayP3Red: 0.23, green: 0.19, blue: 0.8, alpha: 1).cgColor]
        gradient.render(in: ctx)

        ctx.setFillColor(red: 1, green: 0.5, blue: 0.5, alpha: 1)
        let segment1 = CGRect(x: 20, y: 110, width: 30, height: 10)
        ctx.fill(segment1)
    }
}

这样,您除了使用CGGraphicsContext之外不使用CALayer,而是使用CGGraphicsContext,因为您的图层是使用ctx渲染的。