         lineLayer.shadowRadius = 6.0
         
         self.layer.addSublayer(lineLayer)
+        
+        if animates {
+            lineLayer.strokeEnd = 0
+        }
     }
 }
+
+extension BezierView {
+    
+    func animateLayers() {
+        animatePoints()
+        animateLine()
+    }
+    
+    func animatePoints() {
+        
+        var delay = 0.2
+        
+        for point in pointLayers {
+            
+            let fadeAnimation = CABasicAnimation(keyPath: "opacity")
+            fadeAnimation.toValue = 1
+            fadeAnimation.beginTime = CACurrentMediaTime() + delay
+            fadeAnimation.duration = 0.2
+            fadeAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
+            fadeAnimation.fillMode = kCAFillModeForwards
+            fadeAnimation.removedOnCompletion = false
+            point.addAnimation(fadeAnimation, forKey: kFadeAnimationKey)
+            
+            delay += 0.15
+        }
+    }
+    
+    func animateLine() {
+        
+        let growAnimation = CABasicAnimation(keyPath: "strokeEnd")
+        growAnimation.toValue = 1
+        growAnimation.beginTime = CACurrentMediaTime() + 0.5
+        growAnimation.duration = 1.5
+        growAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
+        growAnimation.fillMode = kCAFillModeForwards
+        growAnimation.removedOnCompletion = false
+        lineLayer.addAnimation(growAnimation, forKey: kStrokeAnimationKey)
+    }
+    
+}
+


class BezierView: UIView {
   
    //MARK: Public members
    weak var dataSource: BezierViewDataSource?
    
    var lineColor = UIColor(red: 233.0/255.0, green: 98.0/255.0, blue: 101.0/255.0, alpha: 1.0)
    
    var animates = true
    
    //MARK: Private members
    

            }
        }
        
        lineLayer = CAShapeLayer()
        lineLayer.path = linePath.CGPath
        lineLayer.fillColor = UIColor.clearColor().CGColor
        lineLayer.strokeColor = lineColor.CGColor
