2010-06-28 7 views
12

मैंने पहले एमकेएनोटेशन व्यू के सबव्यूव के रूप में कस्टम कॉलआउट बबल बनाया था क्योंकि निर्मित कॉलआउट इतना सीमित है। जब मुझे कॉलआउट बबल के आकार के लिए खाते में चुना जाता है तो मुझे एमकेएनोटेशन व्यू के सेंटर ऑफसेट में बदलने की आवश्यकता होती है। आईओएस 4 बाहर आने से पहले यह सब पूरी तरह से काम किया। अब, आईओएस 4 के साथ, यह केंद्र ऑफसेट संपत्ति के अपडेट को पूरी तरह से अनदेखा करता है और इसलिए पिन और बबल नीचे कूदने के लिए दिखाई देता है (कॉलआउट बबल का ऊपरी बाएं कोने अब उस स्थान पर है जहां पिन पॉइंट होना चाहिए) ।MKMapView आईओएस 4 में केंद्र ऑफसेट के अपडेट को अनदेखा करता है

क्या किसी को पता है कि यह आईओएस 4 में क्यों बदल गया है? क्या नया केंद्र ऑफसेट पहचानने के लिए MKMapView प्राप्त करने के लिए मैं कुछ कर सकता हूं? क्या यह एक बग है जिसे सेब पेश किया गया है?

सहायता के लिए धन्यवाद!

+0

बस एक ही मुद्दे का सामना करना पड़ा, बस पिच करना चाहता था। मैंने ऑफसेट परिवर्तन की भरपाई करने के लिए वर्तमान में एनोटेशन सेंटर को समायोजित किया है। हालांकि यह आदर्श से बहुत दूर है। –

उत्तर

0

मुझे लगता है कि centerOffset के बजाय आप setRegion का उपयोग कर सकते हैं जो सभी संस्करणों में ठीक काम करता है।

CGPoint point = [mapView convertCoordinate:selectedAnnotation.coordinate toPointToView:self.view]; 

CGRect frame = [customView frame]; 
frame.origin.y = point.y - frame.size.height; 
frame.origin.x = point.x - frame.size.width/2; 

MKCoordinateRegion region = [mapView convertRect:frame toRegionFromView:self.view]; 
[mapView setRegion:region animated:YES]; 
+0

हम मानचित्र के क्षेत्र को समायोजित करने की कोशिश नहीं कर रहे हैं, लेकिन वास्तविक एनोटेशन दृश्य का केंद्र ऑफसेट। –

+0

@Yannick, हाँ, लेकिन क्षेत्र को समान आयामों के साथ सेट करना, लेकिन एक नया केंद्र समन्वय मानचित्र को फिर से केंद्रित करेगा। मैं कहूंगा कि यह जवाब है, जो आपके पास एक ही परेशानी थी। – makdad

+2

यह वह नहीं है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं। वर्तमान मानचित्र क्षेत्र को वही रहना है। मैं एनोटेशन व्यू को अपने नए सेंटर ऑफसेट संपत्ति के अनुसार स्थानांतरित करना चाहता हूं। –

4

मुझे एक ही समस्या है - सेंटर ऑफसेट को केवल पहली बार ध्यान में रखा जाना प्रतीत होता है। यह आंतरिक रूप से बदल दिया गया है, लेकिन दृश्य स्थानांतरित नहीं किया गया है - तो आपको जो करना है वह दृश्य को स्वयं ले जाना है।

आप आवश्यक ऑफसेट के साथ अपने केंद्र को समायोजित करके दृश्य को स्थानांतरित कर सकते हैं - चयनित दृश्य अचयनित दृश्य के साथ ऊपरी-बाएं कोने पर गठबंधन रहता है, इसलिए आपको अपने केंद्रों को रीयलिन करने की आवश्यकता है।

करें -> अचयनित: यहाँ मेरी बात है

self.center = CGPointMake(self.center.x + 56.0, self.center.y + 130.0); 
self.centerOffset = CGPointMake(5.0, -14.0); 

अचयनित -> चयनित:

self.center = CGPointMake(self.center.x - 56.0, self.center.y - 130.0); 
self.centerOffset = CGPointMake(64.0, -81.0); 

कहाँ 130 विचारों के बीच ऊंचाई में अंतर (केंद्र बिंदु नीचे स्थित है) है , और 56 उनके केंद्रों के एक्स ऑफसेट्स के बीच अंतर है।

याद रखें - आपको अभी भी केंद्र ऑफसेट को बदलने की जरूरत है क्योंकि इसे ज़ूम करने पर ध्यान में रखा जाएगा।

उम्मीद है कि इससे मदद मिलती है, मैंने इस पर कुछ घंटे खो दिए हैं। ऐप्पल को एक बग रिपोर्ट जमा करना याद रखें।

+0

धन्यवाद, इससे मुझे मदद मिली! – elsurudo

+0

मेरे लिए काम किया, धन्यवाद! –

6

सुनिश्चित करें कि आप MKAnnotationView और नहीं MKPinAnnotationView उपयोग कर रहे हैं! आप का केंद्र ऑफसेट सेट नहीं कर सकते हैं MKPinAnnotationView -object (यदि आप निश्चित रूप से उपclass को छोड़कर)।

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