     
     private func setUpdateProgress(progress: NSProgress) {
         stopAnimation()
-        initDisplayLinkAndShowImageMask()
+        if displayLink == nil {
+            initDisplayLink()
+        }
+        if status == .Normal {
+            fadeinImageMaskView()
+        }
         status = .InProgress
         smoothToAngle(CGFloat(progress.fractionCompleted))
     }
 
     private func stopAnimation() {
         circleAngle.pop_removeAnimationForKey("angle")
+    }
+    private func destroyDisplayLink() {
         displayLink?.invalidate()
         displayLink = nil
-    }
-    private func initDisplayLinkAndShowImageMask() {
+        self.setNeedsDisplay()
+    }
+    private func initDisplayLink() {
         displayLink = CADisplayLink(target: self, selector: #selector(CircleProgressImageView.displayLinkAction(_:)))
         displayLink?.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
-        if status == .Normal {
-            circleRadiusMargin.value = 5
-            fadeinImageMaskView()
-        }
     }
     private func smoothToAngle(angle: CGFloat) {
         let angleProperty = POPAnimatableProperty.propertyWithName("angle") { (property) in

        newImageView.layer.mask = shapeMaskLayer
    }
    
    // MARK : - Public
    func progressFailed() {
        progress.completedUnitCount = 0
        self.setUpdateProgress(progress)
    }
    func resetProgress() {
        progress.completedUnitCount = 0
        status = .Normal
        circleAngle.value = 0.0
        imageMaskView.alpha = 0.0
        self.setNeedsDisplay()
    }


            animation.toValue = 0
            animation.completionBlock = {(anim, finished) in
                if finished {
                    self.resetProgress()
                    self.destroyDisplayLink()
                    self.image = self.newImageView.image
                }
            }
