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)
我希望它们都能以正确的顺序出现
答案 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
渲染的。