CoreGraphics - 用笔划剪裁渐变

Posted

技术标签:

【中文标题】CoreGraphics - 用笔划剪裁渐变【英文标题】:CoreGraphics - Clipping a gradient with a stroke 【发布时间】:2015-03-14 23:17:57 【问题描述】:

我的 CGContext 有一个路径和一个线宽,这在我的UIView 中绘制了一个漂亮的黑色轮廓。伟大的。现在我正在尝试为这个笔画上色,虽然CGContextSetStrokeColorWithColor 方法还不错,但我想要更鲜艳的颜色,所以决定使用渐变。

问题是 ios 中没有 CGContextSetStrokeColorWithGradient 方法或(我可以看到)任何类似的方法。所以我想我必须能够绘制一个渐变,该渐变被剪裁到我绘制的笔划上。

为此,我已将渐变绘制到UIView,现在UIView 具有填充视图的渐变背景。

所以现在我有一个黑色的描边和我的渐变。伟大的。但是如何将一个剪辑到另一个?所以看起来我的笔画有渐变的颜色?

我在创建描边和渐变之间调用了CGContextClip,但这不会将渐变剪裁到描边,它只是将渐变剪裁到路径的填充。我唯一想将渐变剪裁到的就是笔划。

有什么想法吗?

这是我的drawRect

let context = UIGraphicsGetCurrentContext()
let colourSpace = CGColorSpaceCreateDeviceRGB()

let path = CGPathCreateMutableCopy(path())

CGContextSetLineWidth(context, myLineWidth)
CGContextSetLineCap(context, kCGLineCapRound)
CGContextAddPath(context, path)

CGContextClip(context)

CGContextStrokePath(context)

let gradient = CGGradientCreateWithColors(colourSpace,
    [startColour.CGColor, endColour.CGColor],
    [0.0, 1.0])

CGContextDrawLinearGradient(context,
    gradient,
    CGPoint.zeroPoint,
    CGPoint(x: 0, y: bounds.height),
    CGGradientDrawingOptions.allZeros)

【问题讨论】:

【参考方案1】:

所以我需要简单的CGContextReplacePathWithStrokedPath 方法。文档可能会更清楚地说明要发送到上下文的内容,但是我们开始...

【讨论】:

以上是关于CoreGraphics - 用笔划剪裁渐变的主要内容,如果未能解决你的问题,请参考以下文章

iOS:CoreGraphics - 使用 CGContextClip 和 lineCap = .Round 剪裁弧线

iOS Core Graphics 中的“形状爆裂”笔划

带有渐变 * 和 * 笔划的 Android TextView

Chainer 中的渐变剪裁

渐变剪裁似乎在无上窒息

1-渐变阴影和文本