     /// Layer which holds the overlay.
     fileprivate var overlayLayer: CALayer?
 
-    /**
-     Determines whether a view can be animated.
-     - Parameter view: A UIView.
-     - Parameter state: A MotionTargetState.
-     - Parameter isAppearing: A boolean indicating whether or not the
-     view is going to appear.
-     */
+    override func clean() {
+        super.clean()
+        overlayLayer = nil
+    }
+    
     override class func canAnimate(view: UIView, state: MotionTargetState, isAppearing: Bool) -> Bool {
         return  nil != state.position           ||
                 nil != state.size               ||

                       state.forceAnimate
    }
    
    /**
     Lazy loads the overlay layer. 
     - Returns: A CALayer.
     */
    func getOverlayLayer() -> CALayer {
        if nil == overlayLayer {
            overlayLayer = CALayer()
            overlayLayer!.frame = snapshot.bounds

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