如何将SubView的Frame坐标系转换为Self View的坐标系

时间:2012-07-27 22:32:42

标签: iphone objective-c ios

我以编程方式创建了一个scrollView和一些内部按钮。当我点击任何按钮时必须显示一个弹出窗口。

我的按钮在self.view中的来源就像(100,11)和scrollView(9,11)里面,scrowView在self.view的某个地方。弹出窗口显示在(9,11)但右边一个是(100,11)。我尝试使用转换没有成功。

-(IBAction)showPopover:(id)sender{
//... implemented popover above

//Wrong Origin:
NSLog(@"wrong x:%f y:%f",[sender frame].origin.x, [sender frame].origin.y);

//Transform to correct
CGRect frame = [self.view convertRect:[sender frame] toView:nil];

//Shoulf be right, but is not...
NSLog(@"new x:%f y:%f",frame.origin.x, frame.origin.y);
}

有人帮我吗?

2 个答案:

答案 0 :(得分:78)

视图的框架已经在superview的坐标系中。因此,如果您的设置为self.view,则scrollview包含sender

CGRect frame = [sender.superview convertRect:sender.frame toView:self.view];

// or, better:

CGRect frame = [sender convertRect:sender.bounds toView:self.view];

答案 1 :(得分:12)

<强>夫特:

let frame = sender.convert(sender.bounds, to: self.view)