2012-07-27 19 views
24

Programlı olarak bir scrollView ve orada bazı düğmeler yapıyorum. Herhangi bir düğmeye tıkladığımda bir popover göstermeniz gerekir.SubView'ın Çerçeve Koordinat Sistemini Self View'ın Koordinat Sistemine dönüştürme

Düğümün self.view'deki kökeni (100,11) ve scrollView (9,11) ve scrowView, self.view'de bir yerdedir. Popover (9,11) 'de gösterir, fakat doğru olanı (100,11) olur. Başarısız dönüştürmeyi kullanmayı deneyin.

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

Herkes kam bana yardım eder?

+2

Eğer göz scrollView.contentOffset içine alıyor musunuz? –

cevap

68

Görünümün çerçevesi zaten süper görüntünün koordinat sisteminde. Kurulum Yani eğer self.viewscrollviewsender içerir içerir:

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

// or, better: 

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

Harika ... Teşekkürler. –

+0

ve değilse? herhangi bir yapılandırmada nasıl çalışacağını paylaşabilir misiniz? Tek bir hatta mümkün olduğuna inanıyorum. – Andy

+0

@Andy Bu, "gönderen" ve "self.view" aynı görünüm hiyerarşisinin üyeleri olduğunda her zaman çalışır. Aksi halde soru bir anlam ifade etmez. –

7

Swift:

let frame = sender.convert(sender.bounds to: self.view) 
İlgili konular