如何裁剪 UIScrollView 中显示的 UIImageView 部分并将其保存到 UIImage 变量?

Posted

技术标签:

【中文标题】如何裁剪 UIScrollView 中显示的 UIImageView 部分并将其保存到 UIImage 变量?【英文标题】:How to crop and save the portion of UIImageView that is shown within a UIScrollView to a UIImage variable? 【发布时间】:2017-07-11 23:52:56 【问题描述】:

在显示的图像中,正方形显示UIScrollView,后者显示UIImageView。在这种情况下,用户可以通过平移和捏合来放大或缩小图像。

    当用户完成平移和捏合到所需的正方形时,如何裁剪并将仅显示在UIScrollView 内的结果内容保存到UIImage 中并保存?忽略其余图片内容

    在将UIImageView 加载到UIScrollView 时,如何限制纵向图像以使图像的宽度与滚动视图的宽度相匹配?或者在图像高度与滚动视图高度匹配但永远无法在UIScrollView 中显示任何空格的横向模式下?

我对第二部分问题的尝试如下: 实现了UIScrollViewDelegate委托

self.scrollViewForImage.delegate = self
self.scrollViewForImage.addSubview(self.imgSelected)
self.scrollViewForImage.maximumZoomScale = 2.0

func viewForZooming(in scrollView: UIScrollView) -> UIView? 
    return self.imgSelected

【问题讨论】:

***.com/a/66396409/2033377 我在这里回答了这个问题。但这有一个圆形作物而不是方形作物。 【参考方案1】:

这是未经测试的,但通过从完整的 UIView 创建图像进行了重构,这确实可以完美运行。

我想既然你知道你的UIScrollView 的内容矩形,我基本上添加了传递整个视图。如果它需要调整 CGRect 值,请告诉我,我会更新它。

func createImage(_ rect: CGRect, fromView:UIView) -> UIImage 

    UIGraphicsBeginImageContextWithOptions(CGSize(width: rect.width, height: rect.height), true, 1)
    fromView.layer.render(in: UIGraphicsGetCurrentContext()!)
    image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image

【讨论】:

以上是关于如何裁剪 UIScrollView 中显示的 UIImageView 部分并将其保存到 UIImage 变量?的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 被裁剪并且不使用 Autolayout 滚动

如何使用主 iPhone 视图之外的 UI 元素在 Interface Builder 中设置 UIScrollView?

在 UIScrollView 问题中裁剪缩放图像

在 iPhone 中裁剪后 UIImage 显示模糊

UIScrollView中的drawRect裁剪

在 UIScrollView 中获取 UIImage 可见部分的正确坐标