Я решил проблему с добавлением наблюдателя. Затем наблюдатель делает свое дело, и после этого появляется выноска.
У меня были проблемы с тем, что я не смог обновить информацию в всплывающей подсказке после ее появления. Единственный способ сделать это - создать свой собственный пузырь выноски (насколько я понимаю), который я не чувствовал, учитывая, что у меня есть крайний срок.
Я исправил это, добавив дополнительный UIView с альфа-каналом и текстом «Получение данных о местоположении ...». Я просто отображаю этот вид при нажатии на местоположение, и когда наблюдатель завершает работу, я снова скрываю вид (отклоняясь от курса с помощью анимации).
Надеюсь, мой ответ помог другим.
Код:
[pin addObserver:self
forKeyPath:@"selected"
options:NSKeyValueObservingOptionNew
context:GMAP_ANNOTATION_SELECTED];
Еще немного кода:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context{
NSString *action = (NSString*)context;
MKAnnotationView *annotationView = [(MKAnnotationView*)object retain];
BikeAnnotation *bike = [[annotationView annotation] retain];
if([action isEqualToString:GMAP_ANNOTATION_SELECTED] && [[bike _stationType] intValue] != 5 && [[bike _stationType] intValue] != 6){
BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
if (annotationAppeared) {
NSLog(@"Annotation selected");
else {
NSLog(@"annotation deselected");
}
}
}
И поместите это сразу после @ synthesize's:
NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";