我正在尝试绘制一系列小圆圈,但是当我使用CGContextDrawPath时,它会填充我添加到路径中的圆圈之间的线条。这是代码:
var radius: CGFloat = 3
var bulletSpacing: CGFloat = 10
var numberOfBullets = 5
override func drawRect(rect: CGRect) {
let ctx = UIGraphicsGetCurrentContext()
for i in 1...numberOfBullets{
CGContextAddArc(ctx, CGFloat(Float(i) * Float(bulletSpacing)), self.frame.size.height/2, radius, 0, CGFloat(2 * M_PI), 0)
}
CGContextSetLineCap(ctx, kCGLineCapButt)
CGContextDrawPath(ctx, kCGPathStroke)
有没有办法避免在圆圈之间绘制路径?这就是它的结果:
答案 0 :(得分:3)
来自CGContextAddArc()
的文档(强调添加):
在当前路径中添加圆弧,可能在直线段之前 ...如果当前路径已包含子路径,Quartz 会添加一条连接当前路径的线路弧的起点。 ...弧的终点成为路径的新当前点。
因此,在弧之后,弧的终点成为路径的当前点。然后,当添加下一个弧时,将添加从前一个弧的终点到新弧的起点的线。
一种解决方案是在添加之前立即将当前点移动到新弧的起点。您可以使用:
CGContextMoveToPoint(ctx, CGFloat(Float(i) * Float(bulletSpacing)) + radius, self.frame.size.height/2)
另一种解决方案是在添加每个弧后绘制并清除路径。将您的通话转移至CGContextSetLineCap()
至循环前,并将您对CGContextDrawPath()
的通话移至循环中。