2012-07-27 91 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) 
相關問題