Круглая коронка с UIBezierPath - PullRequest
2 голосов
/ 02 августа 2020

Я пытаюсь нарисовать круглую корону с помощью 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()

Все заполняется: изображение . Хочу набить только корону.

1 Ответ

1 голос
/ 02 августа 2020

Вам необходимо установить 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)

введите описание изображения здесь

...