Итак, у меня есть MKMapView с добавленными моими контактами, а цвет булавки зависит от того, установлено ли значение для этого вывода. Когда я впервые загружаю приложение, вызывается viewForAnnotation
и соответственно устанавливаются цвета. Однако, когда я обновляю информацию о контактах (например, местоположение, название и т.д.), Я также обновляю pinColour, чтобы найти, что он не обновляется. Похоже, что viewForAnnotation
не вызывается снова после первоначального добавления.
Я прочитал много вопросов, подобных этому, и я могу подтвердить, что mapView.delegate = self;
Вот мой код viewForAnnotation
:
- (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;
}
Вот код, где я добавляю вывод:
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];
Вот код, где я обновляю вывод (другой метод для добавления):
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% уверен, что она будет работать, так как она меняет цвет, если я перезапущу приложение!
EDIT: О, и я действительно не хочу начинать удаление аннотаций и их повторное добавление. Это то, что я делаю в краткосрочной перспективе!