如果我从UIImageView开始,并添加子视图,如何将原始UIImageView中的坐标转换为子视图中的相应坐标(屏幕上的相同位置)?
答案 0 :(得分:6)
UIView提供了完全符合此目的的方法。在您的情况下,您有两个选择:
CGPoint newLocation = [imageView convertPoint:thePoint toView:subview];
或
CGPoint newLocation = [subview convertPoint:thePoint fromView:imageView];
他们都做同样的事情,所以选择一个感觉更合适的人。还有用于转换rects的等效函数。这些函数将在同一窗口的任意两个视图之间进行转换。如果目标视图为nil,则它将转换为窗口基坐标/从窗口基坐标转换。这些函数可以处理不是彼此直接后代的视图,并且它还可以处理具有变换的视图(尽管在包含任何旋转或倾斜的变换的情况下,rect方法可能无法生成准确的结果。)
答案 1 :(得分:0)
将子视图的frame.origin从父视图中的点减去子视图坐标中的相同点:
subviewX = parentX - subview.frame.origin.x;
subviewY = parentY - subview.frame.origin.y;
答案 2 :(得分:0)
从代码开始:
UIImageView* superView=....;
UIImageView subView=[
[UIImageView alloc]initWithFrame:CGRectMake(0,0,subViewWidth,subViewHeight)
];
subView.center=CGPointMake(subViewCenterX, subViewCenterY);
[superView addSubview:subView];
(subViewCenterX, subViewCenterY)
坐标是superView中的一个点,其中subView
的中心是“固定”的。通过移动其中心,可以在superView周围移动子视图。我们可以去,例如
subView.center=CGPointMake(subViewCenterX+1, subViewCenterY);
向右移动1点。现在假设我们在superView中有一个点(X,Y)
,我们想在子视图中找到对应的点(x,y)
,以便(X,Y)
和(x,y)
指向同一点点在屏幕上。 x的公式是:
x=X+subViewWidth/2-subViewCenterX;
同样适用于y:
y=Y+subViewHeight/2-subViewCenterY;
为了解释这一点,如果你绘制一个代表superView的框和另一个代表subView的(更大)框,则差异subViewWidth/2-subViewCenterX
是“subView框的位的宽度突出到左边的superView“