да .. я согласен .. пытаюсь преодолеть разрыв между тем, что оп написал и куда они могут пойти.

аюсь программно нарисовать круговой вид прогресса и отцентрировать его внутри подпредставления.circleView, который я настроил / ограничил в конструкторе интерфейсов. Тем не менее, я не уверен, когдаcircleViewОкончательный размер и центр будут доступны (я использую автоматическую разметку), что в конечном итоге мне нужно нарисовать круг. Вот соответствующий код:

@IBOutlet weak var circleView: UIView!

let circleShapeLayer = CAShapeLayer()
let trackLayer = CAShapeLayer()

override func viewDidLoad() {
    super.viewDidLoad()
    // createCircle()
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    print(circleView.frame.size.width)
    createCircle()
}

func createCircle() {

    // Draw/modify circle

    let center = circleView.center

    // Where I need to use circleView's width/center
    let circularPath = UIBezierPath(arcCenter: center, radius: circleView.frame.size.width, startAngle: -CGFloat.pi/2, endAngle: 2 * CGFloat.pi, clockwise: true)

    trackLayer.path = circularPath.cgPath
    trackLayer.strokeColor = UIColor.lightGray.cgColor
    trackLayer.lineWidth = 10
    trackLayer.fillColor = UIColor.clear.cgColor

    circleView.layer.addSublayer(trackLayer)

    circleShapeLayer.path = circularPath.cgPath
    circleShapeLayer.strokeColor = Colors.tintColor.cgColor
    circleShapeLayer.lineWidth = 10
    circleShapeLayer.fillColor = UIColor.clear.cgColor
    circleShapeLayer.lineCap = kCALineCapRound
    // circleShapeLayer.strokeEnd = 0

    circleView.layer.addSublayer(circleShapeLayer)

}

Это печатает ширинуcircleView дважды и только на втором проходеviewDidLayoutSubviews() это действительно правильно:

207.0
187.5 // Correct (width of entire view is 375)

Тем не менее, круг неправильно рисует по одному и тому же пути оба раза, что меня расстраивает, потому что ширина меняется, как показано выше. Может быть, я думаю об этом неправильно?

Я бы предпочел не рисовать круг дважды и надеялся, что найдется способ бежатьcreateCircle() вviewDidLoad() вместо этого, но на данный момент это дает мне тот же результат. Любая помощь будет очень высоко ценится.

Ответы на вопрос(2)

Ваш ответ на вопрос