MKMapView と setRegion:animated:マップビジュアルが更新されない
-
11-09-2019 - |
質問
こんにちは!使用しようとしています MKMapView Apple コードのサンプルはありませんが、他にもさまざまな明確さを持つコードがいくつかあります。(「わかりやすいマニュアルを読んでください」ということはわかっています。私もそれを実行しましたが、100% 明確ではないので、これについてはご容赦ください。)
状況は次のとおりです。私は持っています MKMapView オブジェクトに約 10 個のセットを追加しました MKピン注釈 オブジェクト。ここまでは順調ですね。すべてが正常に割り当て/解放されており、Instruments からの苦情はないようです。
初期表示時に、 MK座標領域 最初のピンの位置に中心点があり、(任意の) スパンが 0.2 x 0.2 であるオブジェクト。次に、次のように呼び出します。
[mapView setRegion:region animated:YES];
[mapView regionThatFits:region];
おお!それはうまくいきました。
その間 ...また、各ピンの位置への移動を可能にするセグメント化されたコントロールもあります。したがって、リストをタップすると、新しい呼び出しのペアを使用して、マップが新しいピンの位置ごとにアニメーション化されます。 setRegion:アニメーション: そして 適合する地域: ...または少なくともそれがアイデアです。
マップは新しいピンの位置に「移動」しますが、マップ自体はその下で更新されません。代わりに、灰色/空白の地図の背景にピンが表示されます... それまで たとえわずかであっても、地図を任意の方向に動かします。すると地図が透けて見えてきます!(前のピンの位置から短い距離内だけを移動している場合は、通常、マップのどの部分がすでに読み込まれているかが表示されます。)
ここで何かばかげたことをしているのではないかと思いますが、少なくとも MapKit のドキュメントからは、それが何なのかを理解できませんでした。もしかして、間違った電話をかけているのでしょうか?(そうですね、少なくとも 1 回は地域を設定する必要がありますね?ただし、それを移動しても役に立たないようです。)また、使用してみました setCenterCo座標:アニメーション化: - 同じ問題です。
現時点では何も想定していません(冗談ではありません)。ただ自分の道を見つけようとしているだけです。
手がかりを歓迎/感謝します!
アップデート:電話をかける setRegion:アニメーション: そして 適合する地域: 初めて、その後 setCenterCo座標:アニメーション化: リストを走査している間は効果がありません。しかし興味深い発見がありました:どちらの場合もアニメーションを NO に変更すると、マップが更新されます。YESに設定されている場合のみ。(何が起こった?!アニメーション化されています:壊れた?そんなはずはありません...???)
解決
SIMULATORを使用すると地図更新が機能しないことが判明しました。試してみると setCenterCo座標:アニメーション化: デバイス上で、私は する その下にある地図の更新を取得します。
結論:私は、マップ更新動作に関してシミュレーターがデバイスと一致すると信頼していました。ああ、私は間違っていました!学んだ教訓。「これをあなたに起こさせないでください。」 :)
他のヒント
を呼び出す必要があります。 setRegion:animated:
メインスレッドコンテキストで呼び出します。次のようなことをしてください:
....
[self performSelectorOnMainThread:@selector(updateMyMap) withObject:nil waitUntilDone:NO];
}
-(void) updateMyMap {
[myMap setRegion:myRegion animated:YES];
}
どのような場合でも (アニメーションかどうかに関係なく) 機能し、その下にあるマップが更新されます。
うーん、不思議ですね。Mac ではシミュレーターでもマップが更新されます。おそらく、マップ ウィジェットがシミュレーターにタイルをダウンロードできないようにするネットワーク設定 (プロキシなど) でしょうか?
これは古いトピックではありますが、私の経験を踏まえてお話したいと思います。マップ アニメーションは、iOS 3.1.x を実行しているデバイスと 3.1.x を実行しているシミュレーターでのみ失敗するようです。私の開発用 iPod touch 3.1.3 では、アニメーションがオンになっているとズームに失敗します。