MKAnnotation - Map Pin标注弹出其他地图引脚

时间:2009-09-22 04:04:41

标签: iphone

我的地图引脚可以非常密集地填充,以便当选择一个引脚时,标注会弹出,但大部分被所有其他地图引脚遮挡 - 我可以将地图引脚放到前面,其中有一个代表选定的地图引脚(未点击标注,选定引脚)。

有关解决方案的任何建议吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是自定义注释视图,则可以为selected属性添加一个观察者,该观察者就像选择该引脚时的委托一样。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
    MKAnnotation *annview = ...code to either dequeue or create new object...
    [annview addObserver:self forKeyPath:@"selected" options:NSKeyValueObservingOptionNew context:@"selectedmapannotation"];               
    return annview;
}

然后您可以使用

监控所选状态
- (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary *)change
                   context:(void *)context;

Mugunth Kumar链接的答案也会给你想要的结果,只是你在你的问题中提到了类似代表的功能。

编辑:

以下是observeValueForKeyPath:ofObject:change:context:method

的内容示例
NSString *action = (NSString*)context;

if([action isEqualToString:@"selectedmapannotation"]){
    BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
    MKAnnotationView *ann = (MKAnnotationView *)object;

    if (annotationAppeared) {
        // do something with the annotation when it is selected
    }
    else {
        // do something with the annotation when it is de-selected
    }
}

答案 1 :(得分:1)

UICallout视图是MKAnnotationView的子视图。所以,我想如果你将Map ping带到前面,UICAlloutView也会在那里。