获得UIView相对于窗口的界限?

时间:2014-01-20 14:22:23

标签: ios objective-c uiview bounds cgrect

我在UIButton中有一些UIView个实例,而这些实例又位于应用的主UIView内。我想要的是相对于窗口的一个按钮框架的CGRect

因此,例如,如果我的内部视图与主视图相关50, 50,那么按钮位于10, 10内部,我想要返回60, 60

有没有一种简单的方法可以做到这一点,而无需跟踪父视图并将其添加等等?

3 个答案:

答案 0 :(得分:4)

您可以使用-[UIView convertRect:toView]-[UIView convertRect:fromView:]将矩形转换为其他视图的坐标系。

所以,如果你有一个对最外层视图的引用(也许你是否使用了导航控制器,这可能是最外面的视图):

UIView *outerView = self.navigationController.view;
UIView *innerView = self.myButton;

CGRect buttonRect = [self.view convertRect:self.innerView.frame toView:outerView];

还有等效的convertPoint:方法。然后,实际上只是计算出你要转换/转换的视图。

答案 1 :(得分:3)

UIView *parent = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)];
UIView *child = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 10, 10)];
[parent addSubview:child];
[self.view addSubview:parent];
NSLog(NSStringFromCGRect([self.view convertRect:child.frame fromView:child.superview]));

记录结果:

{{60, 60}, {10, 10}}

答案 2 :(得分:0)

使用以下功能。

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;

CGPoint pt = [button convertPoint:CGPointMake(button.frame.origin.x, button.frame.origin.y) toView:yourWindow];