     private func commonInit() {
         backgroundColor = UIColor.clear
         
-        // Add the arcLayer to the view's layer's sublayers
-        layer.addSublayer(arcLayer)
+        // Add the shapeLayer to the view's layer's sublayers
+        layer.addSublayer(shapeLayer)
     }
     
     // MARK: - Functions
 
     private func updateView() {
-        let arcPath = UIBezierPath(
-            arcCenter: CGPoint(x: bounds.midX, y: bounds.midY),
-            radius: min(bounds.midX, bounds.midY),
-            startAngle: start * 2 * .pi,
-            endAngle: end * 2 * .pi,
-            clockwise: start < end
-        )
-        arcLayer.path = arcPath.cgPath
-        arcLayer.fillColor = fillColor.cgColor
-        arcLayer.strokeColor = strokeColor.cgColor
-        arcLayer.lineWidth = lineWidth
+        shapeLayer.path = bezierPath.cgPath
+        shapeLayer.fillColor = fillColor.cgColor
+        shapeLayer.strokeColor = strokeColor.cgColor
+        shapeLayer.lineWidth = lineWidth
         
         // Don't draw the arc initially
-        arcLayer.strokeEnd = 0.0
+        shapeLayer.strokeEnd = 0.0
     }
     
-    func animate() {
-        
+    open func animate() {
         updateView()
         
-        // Animate the strokeEnd property of the arcLayer.
+        // Animate the strokeEnd property of the shapeLayer.
         let animation = CABasicAnimation(keyPath: "strokeEnd")
         
         animation.duration = duration


import UIKit

@IBDesignable class ArcView: UIView {
    
    // MARK: - IBInspecatble variables

    @IBInspectable var start: CGFloat = -0.25
    @IBInspectable var end: CGFloat = 0.75
    @IBInspectable var lineWidth: CGFloat = 2
    @IBInspectable var duration: TimeInterval = 3.0
    @IBInspectable var fillColor: UIColor = .clear
    @IBInspectable var strokeColor: UIColor = .blue
    
    @IBInspectable var curveInt: Int {
        get {
            return curve.rawValue
        }
        set {
            curve = Curve(rawValue: newValue) ?? .linear
        }
    }
    
    @IBInspectable var isPaused = false {
        didSet {
            if oldValue != isPaused {
                if !isPaused {

        }
    }
    
    // MARK: - Variables

    open var animationCurve: UIViewAnimationCurve = .linear
    
    open lazy var bezierPath: UIBezierPath = UIBezierPath(
        arcCenter: CGPoint(x: self.bounds.midX, y: self.bounds.midY),
        radius: min(self.bounds.midX, self.bounds.midY) - self.lineWidth / 2,
        startAngle: CGFloat(self.start) * 2 * .pi,
        endAngle: CGFloat(self.end) * 2 * .pi,
        clockwise: self.start < self.end
    )
    
    let shapeLayer = CAShapeLayer()
    
    // MARK: - Init
    
