如何在UIBezierPath中渲染渐变,是否可以将此状态与bezierPath一起存储,以便在drawRect中更快地重新渲染?
我目前在drawRect中渲染bezierPaths,但我无法添加渐变。
当我调用此方法CGContextDrawLinearGradient (ctx, gradient, gradientStartPoint, gradientEndPoint, 0);
时,我没有端点。
我尝试使用BezierPath.currentPoint,但我没有得到预期的结果。
答案 0 :(得分:0)
此包装函数在UIBezierPath(Swift 4)内部呈现渐变:
func drawLinearGradient(inside path:UIBezierPath, start:CGPoint, end:CGPoint, colors:[UIColor])
{
guard let ctx = UIGraphicsGetCurrentContext() else { return }
ctx.saveGState()
path.addClip() // use the path as the clipping region
let cgColors = colors.map({ $0.cgColor })
guard let gradient = CGGradient(colorsSpace: nil, colors: cgColors as CFArray, locations: nil)
else { return }
ctx.drawLinearGradient(gradient, start: start, end: end, options: [])
ctx.restoreGState() // remove the clipping region for future draw operations
}
使用path.addClip()
设置裁剪区域后,您可以更改此设置以呈现任何类型的渐变或其他绘图代码。
您可以缓存CGGradient
对象,以提高图形系统加快将来渲染速度的机会。