从主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)。

为什么要为XY多加10个?

最佳答案

您需要致电的是:
[child2.superview convertRect:child2.frame toView:nil]
不是
[child2 convertRect:child2.frame toView:nil]
即。您需要在包含要转换的帧的视图上调用convertRect:

然后,您可能会发现X == 140和Y == 160,考虑到self.view位于其下面的UIWindow中,则额外的20 Y是状态栏

关于ios - 使用convertRect获取 subview 的WINDOW坐标问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16832191/

10-14 23:25