2017-04-19 2 views
0

Je crée une application iOS où l'utilisateur est censé pouvoir superposer une image à une autre. L'utilisateur peut choisir une image d'arrière-plan, qui serait stockée dans un UIImageView appelé imageView. L'utilisateur peut alors décider d'une image à recouvrir au-dessus de cette image, qui sera stockée dans une UIImageView appelée imageTwo. Ensuite, l'utilisateur est autorisé à déplacer et à redimensionner imageTwo. Cependant, je veux ensuite être en mesure de fusionner ces images en une seule image et de le télécharger.Fusion de deux UIImageViews de différentes tailles

Je suis actuellement en utilisant la fonction ci-dessous pour essayer de télécharger l'image:

@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() 
} 

Cependant, cela ne fonctionne pas très bien. Voici comment l'image regarde dans mon application: Image viewed from app

Cependant, quand je télécharger l'image en utilisant ma fonction d'en haut, l'image d'arrière-plan semble tendue et le topImage/oiseau est pas dans la bonne position: Downloaded image

Quelqu'un at-il des suggestions pour des moyens plus faciles d'accomplir cette tâche ou comment je devrais changer mon code d'en haut? J'ai lu quelqu'un ici suggéré de mettre les UIImageViews dans leur propre vue, mais cela s'est avéré être assez difficile aussi bien ...

Répondre

0

Le problème est que vous compostez les images qui soutiennent vos vues d'image qui sont différentes de ce qui est réellement affiché par vos images vues. Vous pouvez soit appliquer la transformation nécessaire pour que l'image corresponde à ce qui est affiché dans l'image, soit être paresseux et simplement capturer l'image affichée à l'écran. snapshotView(afterScreenUpdates:)