2012-07-27 85 views
24

我通过编程创建了一个scrollView和其中的一些按钮。当我点击任何按钮时都必须显示弹出窗口。如何将SubView的框架坐标系转换为Self View的坐标系

我的按钮在self.view中的起源像(100,11)和scrollView(9,11)内部,而scrowView位于self.view中的某处。 (9,11)中的popover显示,但右边显示的是(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

你考虑scrollView.contentOffset? – 2012-07-27 22:34:56

回答

68

视图的框架已经在超视图的坐标系中。所以,如果你的设置是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

太好了...谢谢。 – 2015-02-07 12:05:06

+0

,如果不是?你能分享如何使它在任何配置上工作吗?我相信这是可能的一行。 – Andy 2015-11-14 14:21:45

+0

@Andy当'sender'和'self.view'是同一视图层次结构的成员时,这将始终有效。否则,这个问题是没有意义的。 – 2015-11-17 05:50:10

7

斯威夫特:

let frame = sender.convert(sender.bounds to: self.view) 
相关问题