अपडेट करने के लिए तो मेरे पास मेरे सभी पिन जोड़े गए एमकेमैप व्यू हैं, और पिन का रंग इस पिन पर एक मान सेट है या नहीं, इस पर निर्भर है। जब मैं पहली बार ऐप लोड करता हूं, viewForAnnotation
कहा जाता है और रंग तदनुसार सेट होते हैं। हालांकि, जब मैं पिन के विवरण अपडेट करता हूं (जैसे स्थान, शीर्षक, इत्यादि ...) मैं पिनकॉलर को अपडेट भी ढूंढता हूं ताकि यह अपडेट न हो। ऐसा लगता है कि शुरुआती ऐड के बाद viewForAnnotation
को फिर से नहीं कहा जाता है।फोर्स MKMapView viewForAnotation
मैं इस के समान कई सवाल पढ़ लिया है और मैं पुष्टि कर सकता है कि mapView.delegate = self;
यहाँ मेरी viewForAnnotation
कोड है:
CLLocationCoordinate2D annotationCoord;
annotationCoord.latitude = latestPosition.latitude;
annotationCoord.longitude = latestPosition.longitude;
MapAnnotation *annotation = [[MapAnnotation alloc] init];
annotation.coordinate = annotationCoord;
annotation.identifier = theIdentifier;
annotation.title = theTitle;
annotation.subtitle = theSubtitle
annotation.pinColour = [self getPinColour];
annotation.counter = theCounter;
[theMapView addAnnotation:annotation];
:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(MapAnnotation *)annotation
{
if([annotation class] == MKUserLocation.class)
return nil;
NSString *pinIdentifier = annotation.identifier; // This is a unique string for each pin and is getting populated every time!
MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:pinIdentifier];
if(annotationView == nil)
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinIdentifier];
else
annotationView.annotation = annotation; // Never had this line fire...
annotationView.canShowCallout = YES;
annotationView.animatesDrop = NO;
annotationView.enabled = YES;
annotationView.tag = annotation.counter;
if(annotation.pinColour == Stopped) // from enum
annotationView.pinColor = MKPinAnnotationColorRed;
else
annotationView.pinColor = MKPinAnnotationColorGreen;
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[infoButton addTarget:self action:@selector(mapCalloutButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
infoButton.tag = annotation.counter;
annotationView.rightCalloutAccessoryView = infoButton;
return annotationView;
}
यहाँ कोड है, जहां मैं पिन जोड़ने है
यहां कोड है जहां मैं पिन अपडेट करता हूं (जोड़ने के लिए अलग-अलग विधि):
updatePin = true;
pinCounter = mapPin.counter;
CLLocationCoordinate2D annotationCoord;
annotationCoord.latitude = latestPosition.latitude;
annotationCoord.longitude = latestPosition.longitude;
[mapPin setCoordinate:annotationCoord];
mapPin.identifier = theIdentifier;
mapPin.subtitle = theSubtitle;
mapPin.pinColour = [self getPinColour];
मुझे यकीन नहीं है कि मैं क्या खो रहा हूं। viewForAnnotation
स्पष्ट रूप से काम कर रहा है, इसे प्रारंभिक जोड़ के बाद कभी नहीं बुलाया जाता है! अगर यह इस फ़ंक्शन को कॉल करना था तो मुझे 100% यकीन है कि यह काम करेगा क्योंकि अगर मैं ऐप को पुनरारंभ करता हूं तो रंग बदल जाता है!
संपादित करें: ओह और मैं वास्तव में एनोटेशन को हटाने और उन्हें फिर से जोड़ने शुरू नहीं करना चाहता हूं। वैसे भी मैं छोटी अवधि में क्या कर रहा हूं!
आह धन्यवाद। मैं वास्तव में ऐसा नहीं करना चाहता था लेकिन मैंने कॉलआउट व्यू को बनाए रखने में कामयाब रहा है, इसलिए अब आप यह नहीं बता सकते! मैं इसे उत्तर के रूप में चिह्नित करूंगा क्योंकि मुझे नहीं पता था कि यह एकमात्र तरीका था। –
नहीं, यह सही उत्तर नहीं है, नीचे देखें –
यह काम नहीं करता है। – Aggressor