我在UIButton
中有一些UIView
个实例,而这些实例又位于应用的主UIView
内。我想要的是相对于窗口的一个按钮框架的CGRect
。
因此,例如,如果我的内部视图与主视图相关50, 50
,那么按钮位于10, 10
内部,我想要返回60, 60
有没有一种简单的方法可以做到这一点,而无需跟踪父视图并将其添加等等?
答案 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];