合并缩小视图的图像,其中包含来自子视图的图像,保留原始大小

时间:2017-02-19 15:07:28

标签: ios swift uikit

我在Stackoverflow上看到了十几个类似的问题。

尽管如此,他们都没有帮助。我有一个应用程序,我在那里拍照,然后在这张照片上添加一些图像。然后我需要用我放在上面的图像保存拍摄的照片。以下是我的结构:

enter image description here

如您所见,我的Photo Scroll View内有Photo View。每个添加的贴纸都作为子视图进入Photo Scroll View

现在,如何将Photo Scroll View中的所有图像合并为单个图像。到目前为止,我已经设法用一个绝对太小的屏幕来保存它。

func saveImage(_ sender: Any) {

    //Create the UIImage
    UIGraphicsBeginImageContext(photoScrollView.frame.size)
    photoScrollView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    //Save it to the camera roll
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

}

另外,我通过创建快照来尝试它。在这种情况下,图像只包含一个白色屏幕,而不包含任何其他内容(并且它不是任何视图的背景颜色)。

func saveImage(_ sender: Any) {

    let snapShot:UIView = self.photoScrollView.snapshotView(afterScreenUpdates: true)!
    UIGraphicsBeginImageContext(self.photoScrollView.bounds.size)
    snapShot.drawHierarchy(in: self.photoScrollView.bounds, afterScreenUpdates: true)

    let image:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

}

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

在尝试了各种方法之后,我通过将Photo View包装在一个简单的UIView(我称之为placeholderView)中找到了解决方案。我添加的所有图片都放在placeholderView内作为子视图,因此它们与photoView处于同一级别。

结果我有结构:Photo Scroll View -> placeholderView-> ALL_OTHER_SUBVIEWSALL_OTHER_SUBVIEWS由背景照片和添加的图片组成。

代码如下:

@IBAction func saveImage(_ sender: Any) {

    //Create the UIImage
    let zoomVal = photoScrollView.zoomScale
    photoScrollView.zoomScale = 1.0

    UIGraphicsBeginImageContext(placeholderView.frame.size)
    placeholderView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    photoScrollView.zoomScale = zoomVal
    //Save it to the camera roll
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

}