2012-11-23 7 views
7

空港から飛行機を飛行する架空の飛行機を表示したいアプリケーションを開発しています。これは私がマップを飛行する唯一のものではないかもしれません。MKOverlayPathViewをタイルの後ろに移動する

これは私がLocationReminders(彼らが持っているMKOverlayPathViewサブクラス、ReminderCircleView)のサンプルコードを使用し、プレーンを表す私自身のMKOverlayに接続しました。このクラスは、オーバーレイクラスのcoordinateおよびradiusプロパティに関するKVO通知をサブスクライブし、更新があるたびにそのパスを無効にします。

オーバーレイは、毎秒数フレームでその位置を更新し、私もそれは私が(それはまだ私が見つけた最高のソリューションモデルオブジェクトですが、非常にスマートでは考慮しない)の視点をシミュレートすることができ、半径のアップデート。

私はテストのために単純な円のパスを使用しています。

この設定は正常に動作します。オーバーレイビューは更新され、正しく動作し、マップおよびすべてのスケーリングが行われます。

問題は、模擬飛行中にオーバーレイが正常に送信先の近くに、タイルの一部の上に描画されないことです。このタイルの背後には、円が見えるように見えます。

私はこの問題に一つのことを理解することができました:私は私が円をズームアウトしている場合、いくつかのタイルの上に描かれていない円が正しく描画されます観察する時はいつでも。ズームインまたはパンニングでは何も解決されません。

私の理論は、タイル(またはその地図rects)の一部が再描画ので、唯一のズームイン・ズームアウトで、私はそれを強制することができますのためにマークされていないことです。しかし、私はそれがズームインが助けにならないという事実と一致していないと思う。私はバグか何かにぶつかっていた場合、私は間違っているか、何をやっている場合、私は知らない

。私は代わりに注釈を使用していましたが、それを使っていましたが、ズームスケールを自分で観察しなくてもズームアウトすれば、平面を表現する能力がなくなります。

バージョン5.1,6.0,6.1でテストしましたが、動作は同じです。

答えて

2

私はその動作の原因を理解しています。

私のMKOverlay私はboundingMapRectを、すべての位置更新で平面の位置に合わせて変更しました。 実際、MKMapViewは最初にMKOverlayを要求します(私は-(BOOL)intersectsMapRect:(MKMapRect)mapRectへの呼び出しをチェックすることでこれを知っています)。私は、全世界(boundingMapRect = MKMapRectWorld;)と一致するboundingMapRectを変更し、それが働いた試験として

。その後、私の飛行機の周りにMKMapRectを作成することだけでした。それはそれでした。

まあ、AppleはboundingMapRectについて次のことを述べている:

オーバーレイを含む投影長方形を。 (必須) このプロパティには、オーバーレイ領域を完全に囲む最小の四角形が含まれています(読み取り専用)。このプロトコルの実装者は、オーバーレイクラスを実装するときにこの領域を設定する必要があります。矩形は、投影された座標を使用して指定する必要があります。つまり、地球儀を2次元表面に投影して得られる座標です。

そして、私が言うと思います何かのように:

オーバーレイを含む投影長方形。 (必須) このプロパティには、の領域を完全に囲み、オーバーレイを表示できる最小の矩形がで含まれています。このプロトコルの実装者は、オーバーレイクラスを実装するときにこの領域を設定する必要があります。矩形は、投影された座標を使用して指定する必要があります。つまり、地球儀を2次元表面に投影して得られる座標です。

関連する問題