我有2 UIImageView
。 UIImageView
都具有相同的大小比例。第一个UIImageView
的大小始终小于或等于第二个UIImageView
的大小。
在第一个UIImageView
我有一个UIView
。用户UIView
可以将其放在第一个UIImageView
上的任何位置。
我想找到第二个x,y
的{{1}},它将位于第二个UIImageView上,其比例与第一个UIView
相同。
请看这张图片清楚。请注意,矩形1是第一个UIView
,矩形2是第二个UIImageView
。
我尝试过的事情:
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接近它应该的位置,但它不完全在应该的位置。
我错过了什么?
谢谢!
答案 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
}