如何使用比率找到UIView原点?

时间:2015-07-18 15:46:13

标签: ios objective-c xcode

我有2 UIImageViewUIImageView都具有相同的大小比例。第一个UIImageView的大小始终小于或等于第二个UIImageView的大小。

在第一个UIImageView我有一个UIView。用户UIView可以将其放在第一个UIImageView上的任何位置。

我想找到第二个x,y的{​​{1}},它将位于第二个UIImageView上,其比例与第一个UIView相同。

请看这张图片清楚。请注意,矩形1是第一个UIView,矩形2是第二个UIImageView

enter image description here

我尝试过的事情:

UIImageView

我的应用程序是一个应用程序,用户可以选择贴纸(CGFloat xMultiplier = imageView2.frame.size.width / imageView1.frame.size.width; CGFloat yMultiplier = imageView2.frame.size.height / imageView1.frame.size.height CGFloat view2x = view1.frame.origin.x * xMultiplier; CGFloat view2y = view1.frame.origin.y * yMultiplier; )并将其放在照片上的任何位置。第二张图片上的stickerView与第二张图片中的stickerView不在同一个地方

我的代码生成的x,y接近它应该的位置,但它不完全在应该的位置。

我错过了什么?

谢谢!

3 个答案:

答案 0 :(得分:0)

首先你应该得到因子(你已经正确地做了),但是你必须按比例计算它到Point1(到View1中的某个点),例如

CGFloat yFactor = view1.frame.size.height / view2.frame.size.height;
CGFloat xFactor = view1.frame.size.width / view2.frame.size.width;


CGPoint pointInView2 = CGPointMake(pointInView1.x / xFactor,pointInView1.y / yFactor);

pointInView1是View1中Sticker的来源

如果sticker2是view2的子视图,那么origin将是pointInView2

如果sticker2不是view2的子视图,并且它们具有相同的superview,则原点

CGPointMake(pointInView2.x + view2.frame.size.width,pointInView2.y + view2.frame.size.height);

如果有任何其他层次结构,您可以使用UIVIews方法convertPoint ...

[view2 convertPoint:pointInView2 toView:sticker2.superView]

答案 1 :(得分:0)

假设矩形2仅是矩形1的重新缩放版本。视图2的位置是:

xpos_view2 = xpos_view1/xwidth_Rect1 * xwidth_Rect2
ypos_view2 = ypos_view1/ywidth_Rect1 * ywidth_Rect2

View2.position = CGPoint(x:xpos_view2, y:ypos_view2)

答案 2 :(得分:0)

从最小的iPhone设备计算比率

func ratioW(_ ofSize : CGFloat) -> CGFloat {
    let bounds = UIScreen.main.bounds
    let windowWidth = bounds.size.width

    let temp = 320/ofSize 

    return windowWidth / temp
}

func ratioH(_ ofSize : CGFloat) -> CGFloat {
    let bounds = UIScreen.main.bounds
    let windowHeight = bounds.size.height

    let temp = 480/ofSize 
    return windowHeight / temp
}