【问题标题】:How do I show MKOverlay above MKAnnotations?如何在 MKAnnotations 上方显示 MKOverlay?
【发布时间】:2015-10-20 15:34:52
【问题描述】:

我正在尝试使用MKOverlay(特别是MKPolyline)在地图上显示路线。但是,我需要将路线显示在我现有的引脚上方(自定义MKAnnotationViews)。有没有什么好的方法可以将MKPolyline 放在引脚上方的前面?

【问题讨论】:

    标签: ios mapkit mkannotation mkoverlay mapkitannotation


    【解决方案1】:

    调查注释层的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 似乎只影响相对于彼此的注释 - 覆盖似乎总是在任何注释的后面
    • 不幸的是,进一步深入研究文档,我不确定这是否可行,除非您在叠加层上创建注释(请参阅我的更新)。似乎Apple认为注释和覆盖需要单独的领域。请问为什么需要注解上面的路径?
    • 嗯,这可能行得通。谢谢。虽然在这一点上可能不值得付出努力。我想做的是同时显示路线和不相关的引脚,但路线更重要,应该显示在引脚上。
    • 你是对的,这对于你想要做的事情来说是很多工作。根据您想要处理 UI 的方式,在路线和图钉之间进行某种切换可能很容易,因此一次只显示一个。当然,这可能不适用于您的情况。祝项目好运!
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多