UIImageView坐标到子视图坐标

时间:2011-02-16 01:41:21

标签: iphone graphics uiimageview

如果我从UIImageView开始,并添加子视图,如何将原始UIImageView中的坐标转换为子视图中的相应坐标(屏幕上的相同位置)?

3 个答案:

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