圆填充为80%

时间:2018-11-09 07:15:22

标签: ios swift

我正在创建圆填充动画,但是我的圆填充率为80%,如果不是50%,则不是一半,有什么方法可以纠正它,因为我很困惑

class FillCircleAnimatedView : UIView {

    private let shapeLayer = CAShapeLayer()

    override init(frame: CGRect) {
        super.init(frame: frame)

        setUpLayer()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func setUpLayer() {

        shapeLayer.fillColor = UIColor.clear.cgColor
        shapeLayer.strokeColor = UIColor.black.cgColor
        shapeLayer.lineWidth = frame.width

        let startAngle = (-1 * CGFloat.pi) / 2
        let endAngle = 2 * CGFloat.pi


        shapeLayer.path = UIBezierPath(arcCenter: center, radius: frame.width / 2, startAngle: startAngle, endAngle: endAngle, clockwise: true).cgPath

        shapeLayer.strokeEnd = 0

        layer.addSublayer(shapeLayer)
    }

    func fillCircle(with progress: CGFloat) {

        shapeLayer.strokeEnd = progress
    }

}

50%

at 50 %

80%

at 80%

1 个答案:

答案 0 :(得分:6)

它显示了这样一个圆圈,因为您的路径仅从-π/2。将这两个值相减得到5π/2,这意味着您的路径不仅仅是一个完整的圆。在50%时,内角为225度/1.25π。您的整个路径比一个完整的圆多90度。

您错误地设置了起始值和结束值。

请参阅此图片:

enter image description here

您应该像以前一样从-π/2开始,但要从3π/2结束。将这两个相减应得到一个完整的圆圈-