     }
     
     /**
-     Retrieves the current value for a given key. 
+     Retrieves the current value for a given key.
      - Parameter for key: A String.
      - Returns: An optional Any value.
      */
-    func currentValue(for key: String) -> Any? {
+    fileprivate func currentValue(for key: String) -> Any? {
         if let key = overlayKey(for: key) {
             return overlayLayer?.value(forKeyPath: key)
         }

     - Parameter for key: A String.
     - Returns: An optional String.
     */
    func overlayKey(for key: String) -> String? {
        guard key.hasPrefix("overlay.") else {
            return nil
        }

    }
    
    /**
     Retrieves the animation for a given key.
     - Parameter key: String.
     - Parameter beginTime: A TimeInterval.
     - Parameter fromValue: An optional Any value.
     - Parameter toValue: An optional Any value.
     - Parameter ignoreArc: A Boolean value to ignore an arc position.
     */
    fileprivate func getAnimation(key: String, beginTime: TimeInterval, fromValue: Any?, toValue: Any?, ignoreArc: Bool = false) -> CAPropertyAnimation {
        let key = overlayKey(for: key) ?? key
        let anim: CAPropertyAnimation
        
        if !ignoreArc, "position" == key, let arcIntensity = targetState.arc,
            let fromPos = (fromValue as? NSValue)?.cgPointValue,
            let toPos = (toValue as? NSValue)?.cgPointValue,
            abs(fromPos.x - toPos.x) >= 1, abs(fromPos.y - toPos.y) >= 1 {
            
            let a = CAKeyframeAnimation(keyPath: key)
            let path = CGMutablePath()
            let maxControl = fromPos.y > toPos.y ? CGPoint(x: toPos.x, y: fromPos.y) : CGPoint(x: fromPos.x, y: toPos.y)
            let minControl = (toPos - fromPos) / 2 + fromPos
            
            path.move(to: fromPos)
            path.addQuadCurve(to: toPos, control: minControl + (maxControl - minControl) * arcIntensity)
            
            a.values = [fromValue!, toValue!]
            a.path = path
            a.duration = duration
            a.timingFunctions = [timingFunction]
            
            anim = a
        } else if #available(iOS 9.0, *), "cornerRadius" != key, let (stiffness, damping) = targetState.spring {
            let a = CASpringAnimation(keyPath: key)
