合并两个不同大小的UIImageViews

时间:2017-04-19 23:55:52

标签: ios swift merge uiimageview uigraphicscontext

我正在创建一个iOS应用程序,用户应该可以将一个图像叠加到另一个图像上。用户可以选择背景图像,该图像将存储在名为imageView的UIImageView中。然后,用户可以决定将图像叠加在该图像的顶部,该图像将存储在名为imageTwo的UIImageView中。然后,允许用户移动并调整imageTwo的大小。但是,我希望能够将这些图像视图合并到一个图像中并下载它。

我目前正在使用以下功能尝试下载图片:

@IBAction func downloadImage(_ sender: Any) {
let bottomImage:UIImage = imageView.image!
let topImage:UIImage = imageTwo.image!

let mySize = CGSize(width: (imageView.frame.size.width), height:(imageView.frame.size.height))

UIGraphicsBeginImageContextWithOptions(mySize, false, 1)
bottomImage.draw(in: CGRect(x: 0,y:0,width: mySize.width,height: mySize.height))
topImage.draw(in: CGRect(x: imageTwo.frame.origin.x ,y: imageTwo.frame.origin.y , width: (imageTwo.frame.size.width),height:(imageTwo.frame.size.height)), blendMode:CGBlendMode.normal, alpha:1.0)
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIImageWriteToSavedPhotosAlbum(newImage, nil,nil,nil)
UIGraphicsEndImageContext()
}

但是,它不能很好地工作。 这是图像在我的应用中的外观: Image viewed from app

但是,当我从上面使用我的函数下载图像时,背景图像看起来很拉伸,并且topImage / bird不在正确的位置:Downloaded image

任何人都有更简单的方法来完成此任务或如何从上面更改我的代码?我在这里读到的人建议将UIImageViews放入他们自己的View中,但事实证明这也很棘手......

1 个答案:

答案 0 :(得分:0)

问题在于,您正在合成支持图像视图的图像,这些图像与图像视图实际显示的图像不同。您可以应用必要的变换,使图像与图像视图中显示的图像匹配,也可以是懒惰的,只捕获屏幕上的图像snapshotView(afterScreenUpdates:)