如果单独的对已有图片进行裁剪,可以使用系统自带的函数,但是这个函数需要对图片进行一些处理。我这里自己实现了一个对UIImage的extension。
extension UIImage {
func subImage(rect: CGRect) -> UIImage? {
let cgImage = self.cgImage! // 需要先转换成CGImage
let image= cgImage.cropping(to: rect) // 要注意rect的大小和位置不要超出image的范围
return image
}
}
这种情况需要注意rect的大小和位置,我这里要实现的是用户在自己创建的UIImageView上对图片自行裁剪。
用户画图部分我选择用CAShapeLayer实现,首先对其写一个扩展,对一些数据进行预设,这样以后定义的时候就不需要每次都进行设置了
extension CAShapeLayer {
class func defaultShapeLayer() -> CAShapeLayer {
let shapeLayer = CAShapeLayer()
let frame = CGRect(x: 0, y: 0, width: screenW, height: bottomImageH) // 这里的frame是定义的用户绘图的frame
shapeLayer.frame = frame
shapeLayer.strokeColor = UIColor.red.cgColor // 线的颜色
shapeLayer.fillColor = UIColor.clear.cgColor // 填充色为透明
shapeLayer.lineWidth =