      - parameter targetProgress: Target progress value. Optional. If left empty assumes 1.0.
      - parameter duration:       Duration in seconds. CGFloat.
      */
-    public func animate(targetProgress: CGFloat = 1.0, duration: CGFloat) {
+    public func animate(targetProgress: CGFloat = 1.0, duration: CGFloat, complete complete:(()->())? = nil) {
         self.targetProgress = targetProgress
         self.duration = duration
+        self.complete = complete
         displayLink?.invalidate()
         displayLink = CADisplayLink(target: self, selector: #selector(next))
         displayLink?.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes)

    private var targetProgress: CGFloat = 0.0
    private var apply: (Interpolatable -> ())?
    private var displayLink: CADisplayLink?
    
    //MARK: Lifecycle
    

        if (direction > 0 && progress >= targetProgress) || (direction < 0 && progress <= targetProgress) {
            progress = targetProgress
            stopAnimation()
            if let complete = complete {
                complete()
            }
        }
    }
    
