根据UIImage大小查找子视图的来源

时间:2017-05-10 10:02:40

标签: ios uiimage frame

这是层次结构:

-- 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的确切位置,以便在合并后它将处于我拖动的同一位置。丢弃。

  1. 我已经编写了所有拖放代码。
  2. 我无法找到合适的B位置与A合并。
  3. 以下是问题截图:

    显示B的初始位置。

    Showing the initial position of B.

    拖放后这是B的新位置。

    This is the new position of B.

    合并后B的位置错误。

    Wrong position of B after merging.

    任何帮助都将不胜感激。

    提前致谢。

    注意! :附加图片Sample Later和截图中的Signature已在Google搜索中创建。我仅用于演示目的。

3 个答案:

答案 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
}