代码之家  ›  专栏  ›  技术社区  ›  Paul Peelen

打开时的地图视图注释标注操作

  •  0
  • Paul Peelen  · 技术社区  · 15 年前

    我有一个带有几个注释的地图视图。每个注释都有一个leftcalloutaccessoryview,它是一个uiviewcontroller类。原因是我希望每个注释都从服务器加载一些数据,并将该数据的结果添加到注释子标题中。 这一切工作得很好,只是我不想在我的应用程序启动时加载所有数据,但我希望远程调用只在调用气泡打开时完成。

    有人知道我怎么做吗?视图将加载,视图将加载等。在这种情况下不要工作。还有什么例子吗?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Paul Peelen    15 年前

    我加了一个观察者解决了这个问题。然后观察者做它的事情,然后标注出现。

    我遇到的问题是,在显示气泡后,无法更新标注气泡中的信息。唯一的方法是创建自己的标注气泡(据我所知),这是我没有感觉到的,因为我有一个最后期限。 我修正了这个问题,添加了一个额外的uiview,上面有一个alpha和一个文本“getinglocationdata…”。我只是在按下某个位置时显示该视图,当观察者完成后,我再次隐藏该视图(使用动画偏离路线)。

    希望我的回答能帮助别人。

    代码:

    [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");
            }
        }
    }
    

    把这个放在“合成”之后:

    NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";