2012-07-27 26 views
24

プログラム内に1つのscrollViewとその中にいくつかのボタンを作成します。いずれかのボタンをクリックすると、ポップオーバーが表示されます。サブビューのフレーム座標系をセルフビューの座標系に変換する方法

self.viewのMyボタンの起点は(100,11)のようで、scrollView(9,11)の内側にあり、scrowViewはself.viewのどこかにあります。 Popoverは(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

あなたが考慮に入れてくださいscrollView.contentOffset? –

答えて

68

ビューのフレームはすでにスーパービューの座標系にあります。お使いの設定があるのであればself.viewは含まれていscrollviewsenderれています

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

// or, better: 

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

素晴らしい...ありがとう。 –

+0

、そうでない場合は?どんな構成でも動作させる方法を共有できますか?私はそれが1行で可能だと信じています。 – Andy

+0

@Andyこれは、 'sender'と' self.view'が同じビュー階層のメンバである場合に、常に動作します。さもなければ質問は意味をなさない。 –

7

スウィフト:

let frame = sender.convert(sender.bounds to: self.view) 
関連する問題