मैंने पहले एक कस्टम कॉलआउट बबल बनाया थाMKAnotationView के लिए सबव्यूव क्योंकि अंतर्निहित कॉलआउट इतना सीमित है। जब मुझे कॉलआउट बबल के आकार के लिए खाते में चुना जाता है तो मुझे एमकेएनोटेशन व्यू के सेंटर ऑफसेट में बदलने की आवश्यकता होती है। आईओएस 4 बाहर आने से पहले यह सब पूरी तरह से काम किया। अब, आईओएस 4 के साथ, यह केंद्र ऑफसेट संपत्ति के अपडेट को पूरी तरह से अनदेखा करता है और इसलिए पिन और बबल नीचे कूदने के लिए दिखाई देता है (कॉलआउट बबल का ऊपरी बाएं कोने अब उस स्थान पर है जहां पिन पॉइंट होना चाहिए) ।
क्या किसी को पता है कि यह आईओएस 4 में क्यों बदल गया है? क्या नया केंद्र ऑफसेट पहचानने के लिए MKMapView प्राप्त करने के लिए मैं कुछ कर सकता हूं? क्या यह एक बग है जिसे सेब पेश किया गया है?
सहायता के लिए धन्यवाद!
उत्तर:
उत्तर № 1 के लिए 6सुनिश्चित करें कि आप उपयोग कर रहे हैं MKAnnotationView और नहीं MKPinAnnotationView! आप एक के केंद्र ऑफसेट सेट नहीं कर सकते हैं MKPinAnnotationView--object (अगर आप निश्चित रूप से subclass छोड़कर)।
जवाब के लिए 4 № 2
मुझे एक ही समस्या है - सेंटर ऑफसेट को पहली बार ध्यान में रखा जाना प्रतीत होता है। यह आंतरिक रूप से बदला जाता है, लेकिन दृश्य स्थानांतरित नहीं होता है - तो आपको जो करना है वह स्वयं को दृश्य को स्थानांतरित करना है।
आप अपने केंद्र को समायोजित करके दृश्य को स्थानांतरित कर सकते हैंआवश्यक ऑफ़सेट के साथ - चयनित दृश्य अचयनित दृश्य के साथ ऊपरी-बाएं कोने पर गठबंधन रहता है, इसलिए आपको अपने केंद्रों को रीयलिन करने की आवश्यकता है। यहां मेरा मामला है:
चयनित -> अचयनित:
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 № 3
मुझे इसके बजाय लगता है 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];