31

我以编程方式在其中创建了一个 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);
}

有人帮我吗?

4

2 回答 2

83

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

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

// or, better:

CGRect frame = [sender convertRect:sender.bounds toView:self.view];
于 2012-07-27T22:39:30.483 回答
17

迅速:

let frame = sender.convert(sender.bounds, to: self.view)
于 2017-05-10T09:32:26.330 回答