         animation.toValue = NSValue(cgSize: size)
         return animation
     }
+    
+    public static func shadow(offset: CGSize) -> CABasicAnimation {
+        let animation = CABasicAnimation(keyPath: "shadowOffset")
+        animation.toValue = NSValue(cgSize: offset)
+        return animation
+    }
+    
+    public static func shadow(opacity: Float) -> CABasicAnimation {
+        let animation = CABasicAnimation(keyPath: "shadowOpacity")
+        animation.toValue = NSNumber(floatLiteral: Double(opacity))
+        return animation
+    }
+    
+    public static func shadow(radius: CGFloat) -> CABasicAnimation {
+        let animation = CABasicAnimation(keyPath: "shadowRadius")
+        animation.toValue = NSNumber(floatLiteral: Double(radius))
+        return animation
+    }
 }

                    a.append(zPosition)
                case .width(_), .height(_), .size(_, _):
                    a.append(Motion.size(CGSize(width: w, height: h)))
                default:break
                }
            }

    case width(CGFloat)
    case height(CGFloat)
    case size(width: CGFloat, height: CGFloat)
    case depth(offset: CGSize, opacity: Float, radius: CGFloat)
}

@available(iOS 10, *)
