【问题标题】:Moving MKOverlayPathView disappears behind tiles移动 MKOverlayPathView 消失在瓷砖后面
【发布时间】:2012-11-23 08:16:44
【问题描述】:

我正在开发一个应用程序,我想在其中显示往返机场的虚构飞机。这可能不是我想在地图上展示的唯一事物。

为此,我使用了来自 LocationReminders 的示例代码(他们拥有的 MKOverlayPathView 子类,ReminderCircleView)并将其连接到我自己的代表飞机的 MKOverlay。此类订阅覆盖类的坐标和半径属性的 KVO 通知,并在每次更新时使其路径无效。

叠加层以每秒几帧的速度更新它的位置,我还更新了它的半径,以便我可以模拟透视(考虑到它是一个模型对象,但仍然是我找到的最佳解决方案,这不是很聪明)。

我正在使用简单的圆形路径进行测试。

此设置工作正常。覆盖视图得到更新,它的行为正确,与地图一起缩放。

问题在于,在模拟飞行中,叠加层不会绘制在某些图块上,通常是在目的地附近。圆圈看起来像是在这些瓷砖后面。

我能够理解这个问题中的一件事:每当我观察到圆圈没有被绘制在某个图块上时,如果我缩小,圆圈将被正确绘制。然而,放大或平移并不能解决任何问题。

我的理论是某些图块(或它们的地图矩形)没有被标记为重绘,因此,只有通过缩小我才能强制这样做。但我仍然认为这与放大似乎没有帮助的事实不一致。

我不知道我是否做错了什么,或者我是否遇到了错误或其他什么。我改用了注释,它正在工作,但是如果你在没有自己观察缩放比例的情况下缩小,我将失去表示一个变得更小的平面的能力。

我在 5.1、6.0 和 6.1 版本中进行了测试,并且行为是相同的。

【问题讨论】:

    标签: objective-c ios mapkit mkoverlay


    【解决方案1】:

    我已经了解导致这种行为的原因。

    在我的MKOverlay 上,我正在更改boundingMapRect 以在每次位置更新时匹配飞机的位置。 实际上,MKMapView 一开始只向MKOverlay 询问它(我通过检查对-(BOOL)intersectsMapRect:(MKMapRect)mapRect 的调用来了解这一点)。

    作为测试,我更改了 boundingMapRect 以匹配整个世界 (boundingMapRect = MKMapRectWorld;) 并且它有效。然后只需在我的飞机路径周围创建一个MKMapRect 就可以了。

    那么,Apple 就boundingMapRect 声明如下:

    包围叠加层的投影矩形。 (必填)(只读) 此属性包含完全包含覆盖区域的最小矩形。这个协议的实现者在实现他们的覆盖类时必须设置这个区域。应该使用投影坐标指定矩形,即通过将地球投影到二维表面上获得的坐标。

    我想说的是:

    包围叠加层的投影矩形。 (必填)(只读) 此属性包含完全包含可以在其中显示叠加层的区域的最小矩形。这个协议的实现者在实现他们的覆盖类时必须设置这个区域。应该使用投影坐标指定矩形,即通过将地球投影到二维表面上获得的坐标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2021-06-08
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多