带有 UIBezierPath 的圆形表冠

Circular crown with UIBezierPath

我正在尝试使用 UIBezierPath 绘制一个圆形皇冠。我可以画两个不同半径的圆:

let bezierCrown = UIBezierPath()
bezierCrown.addArc(withCenter: center,
                       radius: raidus1,
                   startAngle: 0,
                     endAngle: CGFloat.pi*2,
                    clockwise: true)
bezierCrown.move(to: CGPoint(x: center.x+distancia2, y: center.y))
bezierCrown.addArc(withCenter: center,
                       radius: raidus2,
                   startAngle: 0,
                     endAngle: CGFloat.pi*2,
                    clockwise: true)

但是当我填写时:

UIColor.green.setFill()
bezierCrown.fill()

一切都已填满:image。 我只想要皇冠被填满

您需要将 fillRule 设置为 evenOdd

let center = CGPoint(x: 200, y: 400)
        let raidus1:CGFloat = 100
        let raidus2:CGFloat = 80
        
        let bezierCrown = UIBezierPath()
        bezierCrown.addArc(withCenter: center,
                           radius: raidus1,
                           startAngle: 0,
                           endAngle: CGFloat.pi*2,
                           clockwise: true)
        bezierCrown.move(to: CGPoint(x: center.x+raidus2, y: center.y))
        bezierCrown.addArc(withCenter: center,
                           radius: raidus2,
                           startAngle: 0,
                           endAngle: CGFloat.pi*2,
                           clockwise: true)
        
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = bezierCrown.cgPath
        shapeLayer.fillColor = UIColor.blue.cgColor
        shapeLayer.strokeColor = UIColor.red.cgColor
        shapeLayer.fillRule = .evenOdd
        
        view.layer.addSublayer(shapeLayer)