2012-07-27 6 views
24

मैं प्रोग्रामेटिक रूप से एक स्क्रॉल व्यू और वहां के कुछ बटन बना देता हूं। जब मैं किसी भी बटन पर क्लिक करता हूं तो पॉपओवर दिखाना होता है।सब व्यू के फ्रेम समन्वय प्रणाली को स्वयं दृश्य कोऑर्डिनेट सिस्टम में परिवर्तित करने के लिए कैसे करें

मेरा बटन का मूल self.view में है (100,11) और स्क्रॉल व्यू (9, 11) के अंदर और scrowView कहीं भी self.view में है। पॉपओवर (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

और यदि नहीं? क्या आप इसे किसी कॉन्फ़िगरेशन पर कैसे काम कर सकते हैं साझा कर सकते हैं? मेरा मानना ​​है कि यह एक पंक्ति में संभव है। – Andy

+0

@Andy यह हमेशा काम करेगा जब 'प्रेषक' और 'self.view' एक ही दृश्य पदानुक्रम के सदस्य हैं। अन्यथा सवाल कोई समझ नहीं आता है। –

7

स्विफ्ट:

let frame = sender.convert(sender.bounds to: self.view) 
संबंधित मुद्दे

 संबंधित मुद्दे