从主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
和Y
多加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/