Trouver l'origine de la sous-vue par rapport à la taille UIImage

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.

  1. J'ai écrit tout le code pour le glisser-déposer.
  2. Je ne pouvais pas find une position correcte de B pour merge avec A.

Voici les captures d'écran du problème:


Montrant la position initiale de B.

Montrant la position initiale de B.


C'est la nouvelle position de B après le glisser-déposer.

C'est la nouvelle position de B.


Mauvaise position de B après la fusion.

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 }