来自主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?
答案 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
内在它下面。