有时候要在view里,要求A相对于B的位置,可用UIVIew提供的以下函数:
convertRect:toView:
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view
转换调用者视图中的某个矩形,转换为相对于view的矩形坐标
convertRect:fromView:
转换一个矩形从其他视图坐标系到调用者坐标系。
下面是两个点的转换,与上面的矩形转换一样。
convertPoint:toView:
convertPoint:fromView:
下面看个图更加明显,在控制器的view里面有两个控件,一个view A,一个view B,如图所示:
其中A的frame为,{{20,60},{46,20}},B 的frame为{{20,120},{160,284}}
为了方便,两个view的x坐标是一样的。然后求A相对于B的坐标位置,就可以调用他们父view的方法,求A相对于B的坐标位置
CGRect viewAFramw = self.viewA.frame;
CGRect viewA2ViewBFramw = [self.view convertRect:viewAFrame toView:viewB ];
那viewA2ViewBFramw 的值就等于{{0,-60},{46,20}},由于是相对于B的坐标,一般情况B的的bounds原点是(0,0).所以做了转换之后,A的x坐标是0,而y的坐标就是他们在父view里y坐标值的相差的绝对值,那即是-60,所以viewA 相对于viewB是的矩形坐标为{{0,-60},{46,20}}.其他3个函数也是类似,有了这几个方法可以快速算出相对坐标,不用再自己转换了。