使用CGContextDrawPath时,如何避免在形状之间绘制线条?

时间:2015-01-13 04:53:52

标签: xcode swift core-graphics

我正在尝试绘制一系列小圆圈,但是当我使用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)

有没有办法避免在圆圈之间绘制路径?这就是它的结果:enter image description here

1 个答案:

答案 0 :(得分:3)

来自CGContextAddArc()的文档(强调添加):

  

在当前路径中添加圆弧,可能在直线段之前 ...如果当前路径已包含子路径,Quartz 会添加一条连接当前路径的线路弧的起点。 ...弧的终点成为路径的新当前点。

因此,在弧之后,弧的终点成为路径的当前点。然后,当添加下一个弧时,将添加从前一个弧的终点到新弧的起点的线。

一种解决方案是在添加之前立即将当前点移动到新弧的起点。您可以使用:

CGContextMoveToPoint(ctx, CGFloat(Float(i) * Float(bulletSpacing)) + radius, self.frame.size.height/2)

另一种解决方案是在添加每个弧后绘制并清除路径。将您的通话转移至CGContextSetLineCap()至循环前,并将您对CGContextDrawPath()的通话移至循环中。