使用convertRect获取子视图的WINDOW坐标问题

时间:2013-05-30 09:16:03

标签: ios cocoa-touch uiview uiviewcontroller

来自主viewController的 ViewDidAppear

UIView* parent = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
UIView* child1 = [[UIView alloc] initWithFrame:CGRectMake(30, 30, 60, 60)];
UIView* child2 = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 20, 20)];

[parent setBackgroundColor:[UIColor redColor]];
[child1 setBackgroundColor:[UIColor blackColor]];
[child2 setBackgroundColor:[UIColor greenColor]];

[child1 addSubview:child2];
[parent addSubview:child1];
[self.view addSubview:parent];

NSLog(@"Absolute coordinates of child2: %@",NSStringFromCGRect([child2 convertRect:child2.frame toView:nil] ));

孩子的吸收点2:{{150,170},{20,20}}

我原本期望(140,140,​​20,20)。

为什么X额外10,Y 30?

1 个答案:

答案 0 :(得分:10)

您需要致电:

[child2.superview convertRect:child2.frame toView:nil]

不会

[child2 convertRect:child2.frame toView:nil]

即。您需要在包含要转换的帧的视图上调用convertRect:

然后你可能会发现X == 140和Y == 160,额外的20 Y是状态栏,因为self.view存在于UIWindow内在它下面。