我有一个包含UIImage的UIScrollView。最重要的是用户可以移动图像的框,以便裁剪该部分。
此屏幕截图更好地解释了它:
所以他们可以滚动图像,直到他们想要的部分在那个框内。
然后我希望能够将scrollView / UIImage裁剪为完全相同的大小并存储裁剪后的图像。
它不应该很难,但是我花了很多时间尝试截图,UIGraphicsContext等等,似乎无法使用任何东西。
感谢您的帮助。
答案 0 :(得分:-1)
我终于想出了如何让它发挥作用。这是代码:
func croppedImage() -> UIImage {
let cropSize = CGSize(width: 280, height: 280)
let scale = (imageView.image?.size.height)! / imageView.frame.height
let cropSizeScaled = CGSize(width: cropSize.width * scale, height: cropSize.height * scale)
if #available(iOS 10.0, *) {
let r = UIGraphicsImageRenderer(size: cropSizeScaled)
let x = -scrollView.contentOffset.x * scale
let y = -scrollView.contentOffset.y * scale
return r.image { _ in
imageView.image!.draw(at: CGPoint(x: x, y: y))
}
} else {
return UIImage()
}
}
因此它首先计算imageView的比例和实际图像。
然后它会创建该裁剪框的CGSize,如照片所示。但是,宽度和高度必须按比例因子缩放。 (例如280 * 6.5)
您必须检查手机是否正在为UIGraphicsImageRender运行iOS 10.0 - 如果没有,它将无法正常工作。
使用裁剪框大小初始化。
然后必须偏移图像,这是通过获取scrollView的内容偏移量,取消它并乘以比例因子来计算的。
然后返回那时绘制的图像!