Как на нарисованный круг добавить нарисованный мини-круг в UIBezierPath?

Цель:

Получить вот такую фигиру:

circle

Что сделано:

class CreditReportScoringView: UIView {
    
    let shapeLayer = CAShapeLayer()
    let maxRadius: Float = 140.0
    
    // test
    var data = [
        ["value": 50,
         "radius": 140.0,
         "borderColor": CHColors.mandyViolet,
        ],
        ["value": 10,
         "radius": 125.0,
         "borderColor": CHColors.buttonBlue,
        ],
        ["value": 200,
         "radius": 110.0,
         "borderColor": CHColors.mandyGreen,
        ],
        ["value": 76,
         "radius": 95.0,
         "borderColor": CHColors.mandyYellow,
        ],
        ["value": 0,
         "radius": 80.0,
         "borderColor": CHColors.mandyRed,
        ],
    ]
    
    override init(frame: CGRect = .zero) {
        super.init(frame: frame)
        
        setupView()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func setupView() {
        
        let center = self.center
        
        for i in data {
            let trackLayer = CAShapeLayer()
            
            let radius = Float(i["radius"] as! Double)
            let circularPath = UIBezierPath(arcCenter: center, radius: CGFloat(radius) , startAngle: .pi / 2, endAngle: .pi * 2.5, clockwise: true)
            trackLayer.path = circularPath.cgPath
            
            trackLayer.strokeColor = CHColors.zirconLightGray.cgColor
            trackLayer.lineWidth = 1
            trackLayer.fillColor = UIColor.clear.cgColor
            trackLayer.lineCap = .round
            self.layer.addSublayer(trackLayer)
            
            let color = i["borderColor"] as! UIColor
            
            shapeLayer.path = circularPath.cgPath
            shapeLayer.strokeColor = color.cgColor
            shapeLayer.lineWidth = 10
            shapeLayer.fillColor = UIColor.clear.cgColor

            shapeLayer.strokeEnd = 0
        
            self.layer.addSublayer(shapeLayer)
            
            setColor(withValue: 50)
        }
    }
    
    private func setColor(withValue value: Int) {
        let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")

        let floatStr = String(format: "%.1f", CGFloat(value / 2))
        let floatValue = (floatStr as NSString).floatValue
        let value = String(format: "%.1f", floatValue / 100)
        let finalValue = (value as NSString).floatValue

        basicAnimation.toValue = finalValue
        basicAnimation.duration = 2
        basicAnimation.fillMode = CAMediaTimingFillMode.forwards
        basicAnimation.isRemovedOnCompletion = false

        shapeLayer.add(basicAnimation, forKey: "urSoBasic")
    }
}

В чем сложность:

Сложно заключается в добавление белых кружочках на сами круги

Можете посоветовать библиотеку для данной задачи?


Ответы (0 шт):