核心图形绘制同心圆并填补它们之间的空白

Posted

技术标签:

【中文标题】核心图形绘制同心圆并填补它们之间的空白【英文标题】:Core graphics draw concentric circles and fill the gap between them 【发布时间】:2019-03-14 14:53:34 【问题描述】:

我需要画2个圆,用黄色填充内外圆之间的区域,即不在交叉点的区域。我如何使用核心图形来做到这一点?我试过了,但它不起作用:

   override func draw(_ rect: CGRect) 
    // Drawing code

    guard let context = UIGraphicsGetCurrentContext() else  return 

    context.setFillColor(UIColor.yellow.cgColor)

    let path = CGMutablePath()
    let radius = min(rect.width/2, rect.height/2)

    let center = CGPoint(x: rect.width/2, y: rect.height/2)
    path.addEllipse(in: CGRect(x: center.x - radius, y: center.y - radius, width: 2*radius, height: 2*radius))
    context.addPath(path)

   // context.drawPath(using: .fill)

    let path2 = CGMutablePath()
    path2.addEllipse(in: CGRect(x: center.x - radius/2, y: center.y - radius/2, width: radius, height: radius))


    context.addPath(path2)

    context.clip()

    context.drawPath(using: .fill)

【问题讨论】:

【参考方案1】:

您可以使用以下代码:

  let path = CGMutablePath()
    let radius = min(rect.width/2, rect.height/2)

    let center = CGPoint(x: rect.width/2, y: rect.height/2)
    path.addEllipse(in: CGRect(x: center.x - radius, y: center.y - radius, width: 2*radius, height: 2*radius))


    let path2 = CGMutablePath()
    path2.addEllipse(in: CGRect(x: center.x - radius/2, y: center.y - radius/2, width: radius, height: radius))

   path.addPath(path2)
    context.addPath(path)

    context.drawPath(using: .eoFill)


//inner part
   let path3 = CGMutablePath()
    path3.addEllipse(in: CGRect(x: center.x - radius/2, y: center.y - radius/2, width: radius, height: radius))
      context.addPath(path3)
    context.setFillColor(UIColor.green.cgColor)
context.fillPath()

【讨论】:

它可以,但是如果我需要用不同的颜色填充内圈,我们如何扩展它? 像上面一样添加另一个路径。

以上是关于核心图形绘制同心圆并填补它们之间的空白的主要内容,如果未能解决你的问题,请参考以下文章

在 ios 核心图形中绘制电锯

iOS开发UI篇——Core Animation核心动画CAShapeLayer(绘制图形等)简介

在图层顶部绘制#rect 核心图形?

我的 fig1.savefig 函数将我的图形保存为空白屏幕,我该如何解决?

如何使用核心图形绘制带有自定义图案/图像的线条/笔划?

我有一个for循环想绘制多个图形,但它们是互相绘制的,我到底做错了什么?