class DynamicBlurViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() let originalImage = UIImage(named: "example")! let ciImage = CIImage(image: originalImage)! // 1. Set up the perspective transform filter for linear motion blur let perspectiveTransform = CIFilter(name: "CIPerspectiveTransform")! perspectiveTransform.setValue(ciImage, forKey: kCIInputImageKey) let moveX = CGFloat(10) // horizontal motion let moveY = CGFloat(10) // vertical motion perspectiveTransform.setValue(CIVector(x: moveX, y: moveY), forKey: kCIInputTransformKey) // 2. Set up the Gaussian blur filter let gaussianBlur = CIFilter(name: "CIGaussianBlur")! gaussianBlur.setValue(perspectiveTransform.outputImage, forKey: kCIInputImageKey) gaussianBlur.setValue(10.0, forKey: kCIInputRadiusKey) // blur intensity // 3. Apply the filters and render the result if let context = CIContext(options: nil), let cgImage = context.createCGImage(gaussianBlur.outputImage!, from: gaussianBlur.outputImage!.extent) { let resultImage = UIImage(cgImage: cgImage) imageView.image = resultImage } }}