在Cocoa或Quartz中使用过多的绘图函数,绘制路径相当容易,并使用渐变填充它们。然而,我似乎无法找到一种可接受的方式,“笔画” - 绘制一条线宽为几个像素的路径并使用渐变填充此笔划。这是怎么做到的?
编辑:显然问题不够明确。感谢到目前为止的回复,但我已经明白了。我想做的是:
squares http://emle.nl/forumpics/misc/squares.png
左方框是在路径中绘制的NSGradient,后跟路径描边消息。权利就是我想要做的;我想用渐变填充笔划。
答案 0 :(得分:20)
如果将NSBezierPath
转换为CGPath
,则可以使用CGContextReplacePathWithStrokedPath()
方法检索作为描边路径轮廓的路径。格雷厄姆考克斯出色的 GCDrawKit 在-strokedPath
上有一个NSBezierPath
类别方法,可以为您完成此操作,而无需下载到Core Graphics。
获得概述路径后,您可以使用NSGradient
填充该路径。
答案 1 :(得分:14)
我似乎无法找到一种可接受的方式,但是“笔画” - 绘制一条线宽为几个像素的路径并使用渐变填充此笔划。这是怎么做到的?
[原始答案替换为以下]
啊,我明白了。您想将渐变应用于笔划。为此,您使用混合模式。我在another question.的答案中解释了如何做到这一点。以下是适合您目标的步骤列表:
答案 2 :(得分:8)
根据Peter Hosey的回答,我设法做了一个简单的渐变曲线,看起来像这样:
我通过编写下面的代码在UIView类的drawRect(_ :)方法中完成了这个:
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
CGContextBeginTransparencyLayer (context, nil)
let path = createCurvePath()
UIColor.blueColor().setStroke()
path.stroke()
CGContextSetBlendMode(context, .SourceIn)
let colors = [UIColor.blueColor().CGColor, UIColor.redColor().CGColor]
let colorSpace = CGColorSpaceCreateDeviceRGB()
let colorLocations :[CGFloat] = [0.0, 1.0]
let gradient = CGGradientCreateWithColors(colorSpace, colors, colorLocations)
let startPoint = CGPoint(x: 0.0, y: rect.size.height / 2)
let endPoint = CGPoint(x: rect.size.width, y: rect.size.height / 2)
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, CGGradientDrawingOptions.DrawsBeforeStartLocation)
CGContextEndTransparencyLayer(context)
}
函数createCurvePath()返回一个UIBezierPath对象。我还将path.lineWidth设置为5分。