移动MKOverlayPathView消失在瓷砖后面

时间:2012-11-23 08:16:45

标签: objective-c ios mapkit mkoverlay

我正在开发一个应用程序,我想展示飞往机场的虚构飞机。这可能不是我想要代表飞越地图的唯一内容。

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

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

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

此设置正常。叠加视图会更新并且行为正确,可以与地图一起缩放。

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

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

我的理论是,有些瓷砖(或它们的地图部分)没有被标记为重绘,因此,只有通过缩小才能强制进行重绘。但我认为这与放大似乎没有帮助的事实不符。

我不知道我做错了什么,或者我是否碰到了一个小虫或什么东西。我已经使用了注释而且它正在工作,但是如果你在没有自己观察缩放比例的情况下缩小,我就失去了表示变小的平面的能力。

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

1 个答案:

答案 0 :(得分:2)

我已经明白导致这种行为的原因。

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

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

好吧,Apple就boundingMapRect

说明了以下内容
  

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

我会说:

  

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