The CIPerspectiveTransform filter will let you do this if all you want to do is change the corners. If you want to be able to edit all of the mesh points as a bezier path as in photoshop and have the image warp to adjust then you need to do some 3D math, tesselate the patches to triangles and apply the image as a texture to the resulting geometry.
Anyways here is a playground that illustrates how to use CIPerspective transform:
import UIKit
import PlaygroundSupport
let uiImage = UIImage(named: "a.png")!
let image = CIImage(image: uiImage)!
let filter = CIFilter(name: "CIPerspectiveTransform")!
let topLeft = CGPoint(x: -10, y: 0)
let bottomLeft = CGPoint(x: 100, y: uiImage.size.height)
let topright = CGPoint(x: uiImage.size.width, y: -20)
let bottomright = CGPoint(x: uiImage.size.width, y:uiImage.size.height)
filter.setValue(CIVector(cgPoint:topLeft), forKey: "inputTopLeft")
filter.setValue(CIVector(cgPoint:topright), forKey: "inputTopRight")
filter.setValue(CIVector(cgPoint:bottomright), forKey: "inputBottomRight")
filter.setValue(CIVector(cgPoint:bottomLeft), forKey: "inputBottomLeft")
filter.setValue(image, forKey: kCIInputImageKey)
let transformedImage = UIImage(ciImage: filter.outputImage!)
PlaygroundPage.current.liveView = UIImageView(image: transformedImage)