如何将MKOverlay展示在MKAnnotations之上?

7

我正在尝试使用MKOverlay(特别是MKPolyline)在地图上显示路径。然而,我需要该路径显示在我的现有大头针(自定义MKAnnotationView)之上。有没有一种好的方法将MKPolyline置于大头针之上?

1个回答

5

研究注释层的zOrder属性可能会很有用。将注释发送到父视图层次结构中的后面可能会帮助您实现所需的效果。更改注释的z轴位置应该在mapView:didAddAnnotationViews:委托方法内完成。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    annotationView.layer.zPosition = x;
}

我已经有一段时间没有处理MKPolyline了,我知道在iOS 8中有很多变化,但是你可能可以在绘制时直接操作折线的z位置。


更新
从iOS 7.0+开始,当您将MKOverlay添加到地图中时,请使用addOverlay:level:方法。这允许您指定覆盖层的z位置。根据MKOverlayLevels定义,覆盖层的最高z位置之一是MKOverlayLevelAboveLabels

将叠加层置于地图标签、盾牌或兴趣点图标上方,但低于注释和建筑物的3D投影。

不幸的是,如上面的文档所述,地图不支持将叠加层放置在注释上方。一个可能的解决方案是将注释添加到单独的MKOverlay对象中,然后使用insertOverlay:aboveOverlay:将其他带路径的叠加层添加到地图中。


zPosition似乎只影响注释相对于彼此的位置 - 叠加层似乎总是在任何注释后面。 - bplattenburg
不幸的是,深入文档后,我不确定除非您在叠加层上创建注释(请参见我的更新),否则这似乎是不可能的。看起来苹果已经认为注释和叠加层需要分开处理。我可以问一下您为什么需要注释上方的路径吗? - Sam Spencer
嗯,那可能行得通。谢谢。不过现在可能不值得这么做了。我想要做的是同时显示路线和无关的标记,但路线更重要,应该覆盖在标记上方。 - bplattenburg
你说得对,为了你要做的事情那将是很大的工作量。根据你想要如何处理你的UI,可能很容易在路线和标记之间切换,只显示一个选项。当然,这可能并不适用于你的情况。祝你在项目中好运! - Sam Spencer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接