Вам не нужно рисовать каждую из линий между маленькими кругами. Сначала вы можете нарисовать большой круг, а затем нарисовать маленькие круги на этом большом круге .
Например:
override func draw(_ rect: CGRect) {
// change these as you wish
let colors = [UIColor.red, .blue, .green, .red, .blue, .green, .red, .blue, .green, .red, .blue, .green]
let bigCircleRect = self.bounds.insetBy(dx: 16, dy: 16) // This is how big the big circle is compared to the view
let bigCircle = UIBezierPath(ovalIn: bigCircleRect)
bigCircle.lineWidth = 5
UIColor.black.setStroke() // color of the big circle
bigCircle.stroke()
for (index, angle) in stride(from: -CGFloat.pi, to: .pi - .pi / 6, by: .pi / 6).enumerated() {
let centerOfCircle = CGPoint(x: (bigCircleRect.width / 2) * cos(angle) + bounds.width / 2,
y: (bigCircleRect.width / 2) * sin(angle) + bounds.width / 2)
let smallCircleRect = CGRect(origin: centerOfCircle, size: .zero).insetBy(dx: -16, dy: -16) // size of small circle
let smallCircle = UIBezierPath(ovalIn: smallCircleRect)
colors[index].setFill()
smallCircle.fill()
}
}
Выход: