Swift: Position and Resize自定义循环进度视图UIBezierPath

Swift: Position and Resize custom circular progress view UIBezierPath

我正在尝试制作自定义进度视图。我读过这个教程:https://medium.com/@imsree/custom-circular-progress-bar-in-ios-using-swift-4-b1a9f7c55da and watched this video: https://youtu.be/Qh1Sxict3io

这两个教程都非常有帮助,使进度视图的创建变得非常简单直接。 但是我的问题是,对于不同的设备,大小和位置不是动态的。

我尝试将进度视图作为子视图添加到 UIView(具有动态约束),因为以编程方式直接向进度视图添加约束会导致崩溃。 UIView 正在按预期调整大小,但它的子视图(进度视图)没有。

我不确定如何更改它的 x、y 和半径: let circularPath = UIBezierPath(arcCenter: CGPoint (x: frame.midX, y: frame.size.height/2 ), radius: (frame.size.width-1.5)/2, startAngle: -.pi/2, endAngle: 3 * .pi/2, clockwise: true) 因为它在不同的 .swift 文件中。到目前为止,仅更改这 3 个值会导致路径发生一些移动。

任何帮助将不胜感激!

谢谢!

由于您的图层基于路径,因此您需要在视图调整大小时更新它。

我使用了与您提到的教程完全相同的代码,并将以下内容添加到 CircularProgressView

var bezierPath: UIBezierPath {
    UIBezierPath(arcCenter: CGPoint(x: frame.size.width / 2.0, y: frame.size.height / 2.0), radius: (frame.size.width - 20) / 2, startAngle: -.pi / 2, endAngle: 3 * .pi / 2, clockwise: true)
}

override func layoutSubviews() {
    super.layoutSubviews()
    let circularPath = bezierPath
    circleLayer.path = circularPath.cgPath
    progressLayer.path = circularPath.cgPath
}