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 剪裁弧线