У меня следующая проблема:
У меня есть несколько значков на моей карте. После прикосновения к одному открывается пользовательское всплывающее окно и отображается информация. Это прекрасно работает.
Моя проблема в том, что если вы дважды выбрали один и тот же значок, всплывающие окна не открываются, вам нужно прикоснуться к другому или щелкнуть в каком-либо месте карты.
Мой код следующий:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
MKAnnotationView* annotationView = nil;
CPPointOfInterest *myAnnotation = (CPPointOfInterest*) annotation;
if ([myAnnotation isKindOfClass:[MKUserLocation class]] || myAnnotation.poi_id <= 0) {
return nil;
} else {
NSString* identifier = @"Pin";
MKPinAnnotationView* annView = (MKPinAnnotationView*)[mv_map dequeueReusableAnnotationViewWithIdentifier:identifier];
if(nil == annView) {
annView = [[[MKPinAnnotationView alloc] initWithAnnotation:myAnnotation reuseIdentifier:identifier] autorelease];
}
[annView addObserver:self
forKeyPath:@"selected"
options:NSKeyValueObservingOptionNew
context:@"GMAP_ANNOTATION_SELECTED"];
if(self.nearest_poi == myAnnotation) {
annView.pinColor = MKPinAnnotationColorGreen;
} else {
annView.pinColor = MKPinAnnotationColorRed;
}
annView.animatesDrop = YES;
annotationView = annView;
[annotationView setEnabled:YES];
[annotationView setCanShowCallout:NO];
return annotationView;
}
}
Наблюдатель:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context{
NSString *action = (NSString*)context;
if([action isEqualToString:@"GMAP_ANNOTATION_SELECTED"]){
BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
if (annotationAppeared) {
// show popup
}
}
}
Я также попробовал метод didSelectAnnotationView, он также работает только для события первого щелчка.
Я искал несколько часов, но ничего не нашел ...: /
Кто-нибудь знает решение моей проблемы, пожалуйста, дайте мне подсказку ...
Спасибо и привет,
Mathew