【问题标题】:MapKit: How do I get and set the collision frame rectangle of an annotation view?MapKit:如何获取和设置注释视图的碰撞框架矩形?
【发布时间】:2019-04-13 18:51:54
【问题描述】:

MKAnnotationViews 文档说

管理注释视图之间的冲突

var collisionMode: MKAnnotationView.CollisionMode

解释碰撞框架矩形时使用的碰撞模式。

enum MKAnnotationView.CollisionMode

指示如何解释注释视图的碰撞框架矩形的常量。

我想调试一些我不理解的碰撞行为。

那么我如何获得 MapKit 文档中引用的collision frame rectangle?我可能会尝试绘制这个矩形进行可视化调试。

如何设置collision frame rectangle?也许不是直接的,但在众多涉及的视图中,哪个决定了这个矩形?

这是我在MapKit中找到的该术语的唯一参考

编辑

这个collision frame rectangle是只用来做簇还是用来隐藏显示优先级较低的簇?

我有两个AnnotationViews 在视觉上相互叠加。一个有displayPriority = .required,一个有displayPriority = .defaultHigh。一个应该消失。但是他们的collision frame rectangles 在哪里?它们真的重叠吗?

【问题讨论】:

    标签: ios mapkit collision-detection mapkitannotation


    【解决方案1】:

    我找到了解释here。它说:
    collisionMode:一个MKAnnotationView.CollisionMode。如果地图缩小到相撞的程度,两个具有相同clusteringIdentifier 的注释视图将被一个集群注释替换。
    但是什么构成了两个注释视图之间的冲突?要知道这一点,我们需要一个碰撞边缘。可能是:
    .rectangle:边缘是视图的框架。
    .circle:边缘是可在视图框架中内切并居中的最大圆。

    编辑:

    docs 说:为注释视图提供内容的最有效方法是设置其图像属性。注释视图会根据您指定的图像自动调整大小并为其内容绘制该图像。此外,还有其他属性可能会影响frame 属性。所以正是这个自动调整的frame决定了碰撞帧。

    【讨论】:

    • 我在问这个问题之前找到了相同的参考资料。 AnnotationView 使用的许多视图中的哪一个是被使用的?如果是annotationView本身,是什么决定了它的frame?
    • 啊,我错过了。谢谢。这些信息足以让我调试。我为两者设置了图像,并且图像被绘制在彼此之上。
    • 我的回答解决了你的问题吗?如果是这样,请接受它以便关闭问题。
    • 是的,我能够解释帧。 (仍然不明白为什么 Mapkit 在某些边缘情况下绘制重叠注释 - 但这是一个不同的问题)
    • 感谢@ReinhardMänner 和大家。如何设置帧大小真的令人难以置信。如果您只是在 prepareForDisplay 中“设置框架”为 0,0,100,100,那么 似乎 会起作用。但谁知道呢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多