我有一个UIScrollView,它包含一个UIImage。最上面是一个框,用户可以移动该图像,以便该部分被裁剪。
这张截图解释得更好了:

因此,他们可以滚动图像,直到他们想要的部分在该框内。
然后,我希望能够将滚动视图/UIImage裁剪到这个大小,并存储裁剪后的图像。
这不应该很难,但我已经花了很长时间尝试截图,UIGraphicsContext等,似乎什么都做不到。
谢谢你的帮助。
发布于 2017-01-28 13:28:44
我终于想出了如何让它发挥作用。以下是代码:
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)
您必须检查手机是否运行iOS 10.0用于UIGraphicsImageRender -如果不运行,它将无法工作。
用麦田盒大小初始化这一点。
然后,图像必须被偏移,这是通过获取滚动视图的内容偏移量、否定它并乘以比例因子来计算的。
然后返回在此点绘制的图像!
https://stackoverflow.com/questions/41899274
复制相似问题