14

是否可以同时打开多个标注?

编码:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)theMapView {
    for (id<MKAnnotation> currentAnnotation in theMapView.annotations) {
        [theMapView selectAnnotation:currentAnnotation animated:YES];
    }
}

仅打开一个标注。

4

3 回答 3

9

请注意,MKMapView(not MKAnnotationView) 上有一种方法可以以编程方式选择注释,该方法或多或少如您所料:

- (void)selectAnnotation:(id < MKAnnotation >)annotation animated:(BOOL)animated

但是,它会同时自动取消选择任何当前注释,因此这并不能解决您的问题。

奇怪的是,有一个属性MKMapView似乎包含一组当前选定的注释:

@property(nonatomic, copy) NSArray *selectedAnnotations

但是关于这种方法的文档说:

“为该属性分配一个新数组仅选择数组中的第一个注释。”

只是觉得这可能很有趣。

于 2010-06-24T18:41:25.070 回答
7

从严格的 API 角度来看,这似乎是不可能的。

选择-(void)setSelected:(BOOL)selected animated:(BOOL)animated器上的MKAnnotationView状态:“您不应该直接调用此方法。MKMapView 对象调用此方法以响应用户与注释的交互。 ”因此基本消息是在用户选择的全部责任下选择 annotationView 实例,并且由于用户一次只能选择其中一个,因此您不应该同时选择其中的几个。

即使文档说不应直接调用此方法,您是否尝试setSelected:YES在多个MKAnnotationView实例上调用它以查看它提供了什么?

我会做的干净的方式:(但是没有测试过自己)

  • 不要依赖 MKMapView 的选择机制
  • 子类化 MKAnnotationView 以实现自定义
  • 以使标注成为注释视图的一部分的方式进行自定义,以便您可以显示其中的几个。

如果你这样做,你可以同时出现几个标注气泡,并得到如下所示的内容:

替代文字 http://a1.phobos.apple.com/us/r1000/048/Purple/2b/b2/ec/mzl.ttcsrlee.480x480-75.jpg

于 2010-03-10T16:09:12.623 回答
1

自 iOS 11 起,Apple 添加了名为MKMarkerAnnotationView.

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?中,当您将注释视图出列时,请确保将其转换为 MKMarkerAnnotationView(例如var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKMarkerAnnotationView),并将视图的属性设置titleVisibility为。subtitleVisibility.visible

在此处输入图像描述

于 2019-10-25T02:11:16.803 回答