C'est la hiérarchie:
-- ViewController.View P [width: 375, height: 667] ---- UIImageView A [width: 375, height: 667] [A is holding an image of size(1287,1662)] ---- UIImageView B [width: 100, height: 100] [B is holding an image of size(2400,982)]
Remarque: B n'est pas une sous-vue de A. Dans l'application, B est déplaçable. Et j'essaie de merge deux A et B où sont les positions, A [background] et B [premier plan].
Je veux find la position exacte de B telle que, après la fusion, il sera à la même position où j'ai traîné et laissé tomber.
Voici les captures d'écran du problème:
Montrant la position initiale de B.
C'est la nouvelle position de B après le glisser-déposer.
Mauvaise position de B après la fusion.
Toute aide serait appréciée.
Merci d'avance.
Attention ! : Images attachées plus tard et une signature à l'intérieur des captures d'écran a été fondée dans la search Google. Je l'ai utilisé à des fins de démonstration seulement.
Étant donné que la taille d'imageView est différente de l'image d'origine, au lieu de merge deux images via la position ABSOLU de deux vues, vous pouvez utiliser une position RELATIVE.
Sudo-code:
let relativeOrigin = {(B's origin.x in A) / A.width , (B's origin.y in A) / A.height} let actualOrigin = { imgAWidth * relativeOrigin.x , imgAHeight * relativeOrigin.y } //this should be the correct absolute origin.
Vous pouvez le considérer comme une suggestion:
FullscreenPoint.frame.origin.y = (screenShot.frame.origin.y*FullImage.frame.size.height)/screenShot.frame.size.height; FullscreenPoint.frame.origin.x = (screenShot.frame.origin.x*FullImage.frame.size.width)/screenShot.frame.size.width;
J'avais besoin d'utiliser frame.size de imageView (A) au lieu de A.image.size pour get le bon location lors de la fusion.
Voici le code:
func mixImagesWith(frontImage:UIImage?, backgroundImage: UIImage?, atPoint point:CGPoint, ofSize signatureSize:CGSize) -> UIImage { let size = self.imgBackground.frame.size //let size = self.imgBackground.image!.size UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main.scale) backgroundImage?.draw(in: CGRect.init(x: 0, y: 0, width: size.width, height: size.height)) frontImage?.draw(in: CGRect.init(x: point.x, y: point.y, width: signatureSize.width, height: signatureSize.height)) let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return newImage }