 final class SYLayer {
     
     private var superLayer: CALayer!
-    private var textLayer = CATextLayer()
-    private var rippleLayer = CALayer()
+    
+    private var textLayer      = CATextLayer()
+    private var rippleLayer    = CALayer()
     private var subRippleLayer = CALayer()
     
-    private var borderColorAnimtion = CABasicAnimation()
-    private var borderWidthAnimation = CABasicAnimation()
-    private var shadowAnimation = CABasicAnimation()
-    private var backgroundColorAnimation = CABasicAnimation()
-    private var textColorAnimation = CABasicAnimation()
+    private var borderColorAnimtion  = CABasicAnimation(keyPath: AnimationKeyType.borderColor.keyPath)
+    private var borderWidthAnimation = CABasicAnimation(keyPath: AnimationKeyType.borderWidth.keyPath)
+    private var shadowAnimation      = CABasicAnimation(keyPath: AnimationKeyType.shadowOpacity.keyPath)
     
     private var animationBorderColor = AnimationDefaultColor.border {
         didSet {
-            borderColorAnimtion.toValue = animationBorderColor.CGColor
             animationShadowColor = animationBorderColor
         }
     }
-    private var animationTextColor = AnimationDefaultColor.text {
-        didSet {
-            textColorAnimation.toValue = animationTextColor.CGColor
-        }
-    }
-    private var animationBackgroundColor = AnimationDefaultColor.background {
-        didSet {
-            backgroundColorAnimation.toValue = animationBackgroundColor.CGColor
-        }
-    }
+    private var animationTextColor = AnimationDefaultColor.text
+    private var animationBackgroundColor = AnimationDefaultColor.background
     private var animationShadowColor = AnimationDefaultColor.border {
         didSet {
             superLayer.shadowColor = animationShadowColor.CGColor

        didSet {
            switch syLayerAnimation {
            case .Border:
                setBorderAnimation()
            case .BorderWithShadow:
                setBorderWithShadowAnimation()
            default:
                return
            }

        textColorAnimation.timingFunction      = animationTimingFunction.timingFunction
        textColorAnimation.fromValue           = animationTextColor.colorWithAlphaComponent(AnimationConstants.fromTextColorAlpha).CGColor
        textColorAnimation.toValue             = animationTextColor.CGColor
        
        textLayer.foregroundColor = animationTextColor.CGColor
        textLayer.addAnimation(textColorAnimation, forKey: nil)
    }
