के बाद बदलती है मैं एक छोटी परियोजना पर काम कर रहा हूं जो मानचित्र पर 7 विभिन्न प्रकार की टिप्पणियां दिखाती है। मेरी टिप्पणियां सरणी में यूआरएल परिणाम से ली जाती हैं और मैं JSON का उपयोग करके इसे पार्स करता हूं। मेरे पास बहुत सारी टिप्पणियां हैं और मानचित्र लोड होने के बाद सब कुछ अच्छा दिखता है। ज़ूम इन करने और ज़ूम आउट करने के बाद, पिन छवियों को गलत पिन छवि (किसी विशिष्ट छवि, कोई सुराग क्यों नहीं) के कारण किसी कारण से बदलती है।एमकेमैपव्यू एनोटेशन गतिशील पिन छवि ज़ूमिंग
मुझे यकीन है कि मुझे यहां कुछ याद आ रही है ... क्या आप कृपया मदद कर सकते हैं :)?
यहाँ इसके बारे में अब और मेरे कोड का एक हिस्सा है, अगर आप की जरूरत है मुझे पता है:
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
static NSString *identifier;
if(_mapView.tag==1){identifier = @"TurbulencePin";}
if(_mapView.tag==2){identifier = @"IcingPin";}
if(_mapView.tag==3){identifier = @"WindsPin";}
if(_mapView.tag==4){identifier = @"TemperaturePin";}
if(_mapView.tag==5){identifier = @"CloudsPin";}
if(_mapView.tag==6){identifier = @"VisibilityPin";}
if(_mapView.tag==7){identifier = @"MultiplePin";}
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
if ([annotation isKindOfClass:[Annotation class]]) {
CustomAnnotationView* annotationView = (CustomAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
annotationView = nil;
if (annotationView == nil) {
annotationView = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png",identifier]];
annotationView.image = img;
}
else
{
annotationView.annotation = annotation;
}
return annotationView;
}
return nil;
}
अद्यतन:
दूसरों की प्रतिक्रिया के आधार पर, मैं संशोधित कर लिया है छवि सेटिंग के लिए कोड निम्नानुसार है:
Annotation *myCustomAnn = (Annotation *)annotation;
NSString *imgName = myCustomAnn.imageName;
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"%@Pin.png",imgName]];
annotationView.image = img;
return annotationView;
प्लस, मैं फिर से annotationView = nil;
हालांकि, मैं एनोटेशन.एम में छवि नाम को हार्डकोडेड मान के रूप में सेट नहीं कर सकता क्योंकि मुझे प्रत्येक एनोटेशन के लिए एक अलग पिन छवि प्रदर्शित करने की आवश्यकता है। मुझे यकीन है कि एक स्पष्टीकरण है लेकिन नक्शा के नीचे एनोटेशन.एम से प्राप्त होने वाला एकमात्र मूल्य दृश्य: व्यूफोरएनोटेशन: एनोटेशन निर्देशांक (myCustomAnn.coordinate.latitude
और myCustomAnn.coordinate.longitude)
है, मुझे कोई संकेत नहीं है कि एनोटेशन से अन्य गुण कैसे प्राप्त करें। मीटर
जैसे शीर्षक अन्य संपत्तियों,, imgname आदि वापस के रूप में अशक्त आता
यह एनोटेशन प्रकार एनोटेशन की एक संपत्ति होनी चाहिए, इसके लिए मानचित्र की 'टैग' संपत्ति का उपयोग नहीं करना चाहिए। (एक तरफ, आपके 'पहचानकर्ता' को स्थैतिक होने की आवश्यकता नहीं है यदि आप इसे प्रोग्रामेटिक रूप से सेट कर रहे हैं।) लेकिन केवल एक चीज जिसे मैं कल्पना कर सकता हूं, पिन छवियों को बदलने का कारण बनता है यदि 'टैग' किसी भी तरह से बदल रहा है। मैं यह लॉगिंग करने का सुझाव देता हूं और देख रहा हूं कि क्या हो रहा है (लेकिन, बेहतर है, 'टैग' छोड़ दें और अपनी एनोटेशन के लिए कस्टम प्रॉपर्टी का उपयोग करें)। – Rob
वैसे, मुझे उम्मीद है कि आपके पास एक ही समय में सात मानचित्र खुले नहीं हैं। और यदि आप करते हैं, तो '_mapView' (जो कुछ ivar है) का उपयोग न करें बल्कि इस विधि के पैरामीटर' mapView' का उपयोग करें। – Rob
आपने कहा "एनोटेशन.एम में छवि का नाम सेट नहीं कर सकता ..."। सही बात। आपको एनोटेशन.एम में ऐसा नहीं करना चाहिए। आपकी एनोटेशन में। आपको 'imageName' के लिए बस एक नई संपत्ति परिभाषित करनी चाहिए। फिर एनोटेशन बनाने के बाद आपके कोड में एनोटेशन (आपका व्यू कंट्रोलर?) बनाता है, वहीं आप अपनी एनोटेशन के लिए 'imageName' प्रॉपर्टी सेट करते हैं। आपकी अन्य संपत्तियों के बारे में शून्य होने पर, सवाल यह है कि क्या आप उन गुणों को अपने वीसी में सेट करते हैं, जहां आपने एनोटेशन ऑब्जेक्ट के 'आवंट'/'init' किया था, लेकिन इससे पहले कि आप 'addAnotation' कॉल करें। – Rob