             self.setNeedsDisplay()
         }
     }
-    @IBInspectable public var showFloatingPoint: Bool = false
+    @IBInspectable public var showFloatingPoint: Bool = false {
+        didSet {
+            self.setNeedsDisplay()
+        }
+    }
+    
+    public var animationDuration: CFTimeInterval = 1.0
+    public var animationStyle: String = kCAMediaTimingFunctionEaseIn
+    
+    private lazy var shapeLayer = CAShapeLayer()
     
     
     // MARK: Methods

                                     endAngle: innerEndAngle,
                                     clockwise: true)
        
        innerPath.lineWidth = innerRingWidth
        innerRingColor.setStroke()
        innerPath.lineCapStyle = inStyle
        innerPath.stroke()
    }
    
    /// Draws the value label inside of the progress rings

    }
    
    public func setValue(_ newVal: CGFloat, animated: Bool) {
        self.value = newVal
        if animated {
            animateInnerRing()
        }
        
    }
    
    func animateInnerRing() {
        let animation = CABasicAnimation(keyPath: "strokeEnd")
        animation.duration = animationDuration
        animation.fromValue = 0.0
        animation.timingFunction = CAMediaTimingFunction(name: animationStyle)
        animation.toValue = 1.0
        animation.isRemovedOnCompletion = false
        animation.fillMode = kCAFillModeForwards
        shapeLayer.add(animation, forKey: "animateInnerRing")
    }
}
