这是层次结构:
-- 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)]
注意:B不是A的子视图。在应用程序中,B是可拖动的。我正在尝试合并两个位置为A的A和B,A [背景]和B [前景]。
我想找到B的确切位置,以便在合并后它将处于我拖动的同一位置。丢弃。
以下是问题截图:
显示B的初始位置。
拖放后这是B的新位置。
合并后B的位置错误。
任何帮助都将不胜感激。
提前致谢。
注意! :附加图片Sample Later和截图中的Signature已在Google搜索中创建。我仅用于演示目的。
答案 0 :(得分:0)
因为imageView的大小与原始图像不同,所以您可以使用RELATIVE位置,而不是通过两个视图的ABSOLUTE位置合并两个图像。
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.
答案 1 :(得分:0)
您可以将其视为建议:
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;
答案 2 :(得分:0)
我需要使用imageView' s(A)frame.size而不是A.image.size来合并时获取正确的位置。
以下是代码:
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
}