CAShapeLayer 意外的 StrokeEnd

Unexpected StrokeEnd for CAShapeLayer

我正在使用 CAShapeLayer 绘制一个圆圈,但出于某种原因,描边只会以 25% 的间隔绘制。例如,将 StrokeEnd 设置为 0.4 会将笔划绘制到圆的 50%。

如何将 CAShapeLayer 的笔划画到预期的位置?

import UIKit

class DrawCircle {
    let shapeLayer = CAShapeLayer()
    let trackLayer = CAShapeLayer()
    let center: CGPoint
    let radius: CGFloat
    let startAngle: CGFloat
    let endAngle: CGFloat
    let clockwise: Bool

    let fillColor: CGColor
    let strokeColor: CGColor
    let lineWidth: CGFloat
    var strokeEnd: CGFloat
    let view: UIView
    let circularPath: UIBezierPath
    let withTrack: Bool
    private var trackColor: CGColor

    init(withTrack: Bool, trackColor: CGColor, radius: CGFloat, center: CGPoint, clockwise: Bool, fillColor: CGColor, strokeColor: CGColor, lineWidth: CGFloat, view: UIView) {
        //path params
        self.center = center
        self.radius = radius
        self.startAngle = -CGFloat.pi / 2
        self.endAngle = 2 * CGFloat.pi
        self.clockwise = clockwise
        self.circularPath = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: clockwise)
        //shape params
        self.fillColor = fillColor
        self.strokeColor = strokeColor
        self.strokeEnd = 0.4
        self.lineWidth = lineWidth

        //view to attach to
        self.view = view
        self.withTrack = withTrack
        if withTrack {
            self.trackColor = trackColor
        } else {
            self.trackColor = UIColor.clear.cgColor
        }
    }

    func draw() {
        if withTrack {
            drawTrack()
            print("track drawn: \(self.trackLayer)")
        }
        shapeLayer.path = circularPath.cgPath
        shapeLayer.strokeColor = strokeColor
        shapeLayer.fillColor = fillColor
        shapeLayer.lineWidth = self.lineWidth
        shapeLayer.strokeEnd = self.strokeEnd
        shapeLayer.lineCap = .round
        view.layer.addSublayer(shapeLayer)
    }

    func drawTrack() {
        trackLayer.path = circularPath.cgPath
        trackLayer.strokeColor = trackColor
        trackLayer.fillColor = UIColor.clear.cgColor
        trackLayer.lineWidth = self.lineWidth
        trackLayer.lineCap = .round
        view.layer.addSublayer(trackLayer)
    }

}

这个问题被标记为重复,但是这个问题完全不同,提供的答案画了半个圆圈,而不是一个完整的圆圈。结束角度值完全不同

将开始和结束角度更改为:

self.startAngle = -CGFloat.pi / 2 
self.endAngle = 1.5 * CGFloat.pi