如何将子视图的帧坐标系转换为自视图的坐标系



我通过编程创建了一个scrollView和里面的一些按钮。当我点击任意按钮时,必须显示弹出窗口。

我的按钮在self.view中的原点是(100,11),在scrollView(9,11)内部,scrowView在self.view中的某个地方。弹出窗口显示在(9,12)中,但正确的应该是(1000,11)。我尝试使用convert,但没有成功。

-(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);
}

有人可以帮我吗?

视图的框架已经在超级视图的坐标系中。因此,如果您的设置是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];

Swift:

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

最新更新