Основная графика рисует концентрические круги и заполняет промежуток между ними

#ios #uikit #core-graphics #cgcontext #quartz-2d

#iOS #uikit #ядро-графика #cgcontext #quartz-2d

Вопрос:

Мне нужно нарисовать 2 круга и залить область между внутренним и внешним кругом желтым цветом, то есть область, которая не находится на пересечении. Как мне это сделать, используя core graphics? Я пробовал это, но это не работает:

    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()
  

Комментарии:

1. Это работает, но как мы можем расширить его, если мне нужно залить внутренний круг другим цветом?

2. добавьте другой путь, подобный указанному выше.