我在Stackoverflow上看到了十几个类似的问题。
尽管如此,他们都没有帮助。我有一个应用程序,我在那里拍照,然后在这张照片上添加一些图像。然后我需要用我放在上面的图像保存拍摄的照片。以下是我的结构:
如您所见,我的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)
}
有人可以帮助我吗?
答案 0 :(得分:0)
在尝试了各种方法之后,我通过将Photo View
包装在一个简单的UIView
(我称之为placeholderView
)中找到了解决方案。我添加的所有图片都放在placeholderView
内作为子视图,因此它们与photoView
处于同一级别。
结果我有结构:Photo Scroll View -> placeholderView-> ALL_OTHER_SUBVIEWS
。 ALL_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)
}