【问题标题】:When using CGContextDrawPath, how do you avoid drawing the lines between shapes?使用 CGContextDrawPath 时,如何避免在形状之间画线?
【发布时间】:2015-01-13 04:53:52
【问题描述】:

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

有没有办法避免在圆圈之间绘制路径?这就是它最终的样子:

【问题讨论】:

    标签: xcode swift core-graphics


    【解决方案1】:

    来自CGContextAddArc() 的文档(已添加重点):

    向当前路径添加圆弧,前面可能有直线段 ...如果当前路径已经包含子路径,Quartz 添加一条连接当前点到圆弧的起点。 …弧的终点成为路径的新当前点。

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

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

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

    另一种解决方案是在添加每条弧线后绘制并清除路径。将您对 CGContextSetLineCap() 的调用移到循环之前,并将您对 CGContextDrawPath() 的调用移到循环中。

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 2012-10-14
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2015-08-11
      相关资源
      最近更新 更多