我正在开发一个应用程序,我想展示飞往机场的虚构飞机。这可能不是我想要代表飞越地图的唯一内容。
为此,我使用了LocationReminders(他们拥有的MKOverlayPathView子类ReminderCircleView)中的示例代码,并将其连接到我自己的代表飞机的MKOverlay。此类在overlay类的坐标和radius属性上订阅KVO通知,并在每次更新时使其路径无效。
叠加层以每秒几帧的速度更新其位置,我也会更新它的半径,这样我就可以模拟透视图(考虑到它是一个模型对象而不是很聪明,但仍然是我找到的最佳解决方案)。
我正在使用简单的圆形路径进行测试。
此设置正常。叠加视图会更新并且行为正确,可以与地图一起缩放。
问题在于,在模拟飞行中,不会在通常靠近目的地的某些图块上绘制叠加层。圆圈看起来像是在这些瓷砖后面。
我能够理解这个问题中的一件事:每当我观察到圆圈没有被绘制在一些瓷砖上时,如果我缩小,圆圈将被正确绘制。放大或平移并不能解决任何问题。
我的理论是,有些瓷砖(或它们的地图部分)没有被标记为重绘,因此,只有通过缩小才能强制进行重绘。但我认为这与放大似乎没有帮助的事实不符。
我不知道我做错了什么,或者我是否碰到了一个小虫或什么东西。我已经使用了注释而且它正在工作,但是如果你在没有自己观察缩放比例的情况下缩小,我就失去了表示变小的平面的能力。
我已经在版本5.1,6.0和6.1中进行了测试,行为是相同的。
答案 0 :(得分:2)
我已经明白导致这种行为的原因。
在我的MKOverlay
我正在更改boundingMapRect
以匹配每个位置更新时飞机的位置。
实际上MKMapView在开始时只询问MKOverlay
(我通过检查-(BOOL)intersectsMapRect:(MKMapRect)mapRect
的调用来了解这一点。)
作为测试,我更改了boundingMapRect
以匹配整个世界(boundingMapRect = MKMapRectWorld;
)并且它有效。然后只是在我的飞机路径周围创建一个MKMapRect
的问题就是这样。
好吧,Apple就boundingMapRect
:
包含叠加层的投影矩形。 (必填)(只读) 此属性包含完全包含覆盖区域的最小矩形。此协议的实施者必须在实现其覆盖类时设置此区域。应使用投影坐标指定矩形,即通过将球体投影到二维表面上获得的坐标。
我会说:
包含叠加层的投影矩形。 (必填)(只读) 此属性包含最小的矩形,该矩形完全包含可以在 中显示叠加层的 区域。此协议的实施者必须在实现其覆盖类时设置此区域。应使用投影坐标指定矩形,即通过将球体投影到二维表面上获得的坐标。