да .. я согласен .. пытаюсь преодолеть разрыв между тем, что оп написал и куда они могут пойти.
аюсь программно нарисовать круговой вид прогресса и отцентрировать его внутри подпредставления.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()
вместо этого, но на данный момент это дает мне тот же результат. Любая помощь будет очень высоко ценится.