2012-11-23 57 views
7

我正在開發一個應用程序,在那裏我想展示從機場飛來的虛構飛機。這可能不是我想通過地圖表達的唯一事情。移動MKOverlayPathView消失在瓷磚後面

爲此,我使用了LocationReminders(MKOverlayPathView子類,ReminderCircleView)的示例代碼,並將它連接到我自己代表飛機的MKOverlay。此類爲覆蓋類的座標和半徑屬性訂閱KVO通知,並在每次有更新時使其路徑無效。

疊加更新其位置以每秒幾幀,我也更新它的半徑,所以我可以模擬角度(不是很聰明考慮它是一個模型對象,但還我已經找到了最佳的解決方案)。

我正在使用簡單的圓形路徑進行測試。

此設置工作正常。覆蓋視圖得到更新並且行爲正確,可以與地圖一起縮放。

問題是,在模擬飛行中,疊加層不會被繪製在某些貼圖上,通常在目標附近。這個圓圈看起來像是在這些瓷磚後面。

我能夠理解這個問題一兩件事:每當我看到不被繪製在一些瓦圈,如果我縮小了一圈將被正確繪製。然而,放大或平移並不能解決任何問題。

我的理論是,一些地磚(或他們的地圖rects)都沒有被標記爲重繪,因此,只能通過縮小我可以強制。但我認爲這與放大似乎沒有幫助的事實不符。

我不知道我是否做錯了什麼,或者如果我碰到一個bug或什麼的。我已經使用了註釋,而且它正在工作,但是由於我沒有能力來代表飛機縮小的情況,因此如果您自己縮放而不觀察縮放比例。

我已經在版本5.1,6.0和6.1中測試過,行爲是一樣的。

回答

2

我明白是什麼導致了這種行爲。

在我的MKOverlay我改變boundingMapRect以匹配飛機在每個位置更新的位置。 實際上,MKMapView僅在開始時詢問MKOverlay(我通過檢查-(BOOL)intersectsMapRect:(MKMapRect)mapRect的電話瞭解了這一點)。

作爲一個測試,我改變了boundingMapRect到全世界(boundingMapRect = MKMapRectWorld;)匹配和它的工作。然後,這只是在我的飛機的道路上創建MKMapRect的問題,就是這樣。

那麼,蘋果國對boundingMapRect如下:

投影矩形包圍覆蓋。 (必需)(只讀) 此屬性包含完全包含重疊區域的最小矩形。這個協議的實現者在實現它們的覆蓋類時必須設置這個區域。應該使用投影座標來指定矩形 - 即通過將球體投影到二維表面上獲得的座標。

而且我要這樣說:

投影矩形包圍覆蓋。 (必填)(只讀) 此屬性包含完全包含覆蓋圖可以在中呈現的區域的最小矩形。這個協議的實現者在實現它們的覆蓋類時必須設置這個區域。應該使用投影座標來指定矩形 - 即通過將球體投影到二維表面上獲得的座標。