地図ビューに最初にアノテーションを完全に読み込むことができます。しかし、ボタンをクリックして(すでにロードされている)マップをリロードしようとすると、ユーザーはプロセスが完了するまで待つ必要があります。 この問題は、リロード時にmapviewが大きく動かされるまで、新しい注釈が表示されない、つまりviewForAnnotationが起動するために発生します。私は 'performSelectorInBackground' & 'performSelectorOnMainThread'を含むソリューションで私のような他の2つの質問を見ました。前者は私のために働いていませんでした:(&後者はしたくないです(しかし、これは唯一のオプションです)。ユーザーがマップとやりとりすることができるように、注釈がメインスレッドをブロックせずにロードされるようにしたいのですが、そのようなアニメーションは主なスレッドで最もうまくいくことを知っているので、質問1.マップをリロードするまでユーザーを待たせる以外の方法はありませんか?2.それを行う最良の方法に関する提案?事前に 感謝。メインスレッドをブロックせずにmapviewアノテーションを追加/再読み込み
4
A
答えて
4
現在地この を達成するために、ディスパッチキューのブロックを使用することができます。この
dispatch_queue_t queue = dispatch_queue_create("com.MyApp.AppTask",NULL);
dispatch_queue_t main = dispatch_get_main_queue();
dispatch_async(queue,
^{
//do the fetching of data here(Don't do any UI Updates)
dispatch_async(main,
^{
// Do the UI Update here.
});
});
のようなプライベートキューにあなたを作成することができ、構文
です
Appleはこれを再帰分解と呼んでいます。
dispatch_async()
と
とdispatch_async()
のバックグラウンドスレッドに計算がオフロードされ、バックグラウンドスレッドで計算された更新データでブロックが実行されるようにスケジュールされます。
関連する問題
- 1. 再読み込みせずにカートを追加する
- 2. Android:再読み込みせずにアクティビティを再開する
- 3. ブロックせずにstdioからデータを読み込みますか?
- 4. 問題plist配列からMapViewアノテーションを読み込む - Xcode 4.2
- 5. メインスレッドをブロックせずにSceneKit SCNSceneに複数のノードを追加
- 6. 再読み込みせずにページを表示する
- 7. 再帰的読み込みZipFileを展開せずに(Java)
- 8. ページを再読み込みせずに新しい値をクッキーに追加するには?
- 9. ページ全体を再読み込みせずに、追加された要素を更新する
- 10. ページを再読み込みせずに、読み込まれたhtmlページにhtmlコードを挿入するには?
- 11. ページの読み込み中に読み込み中のGIFを追加VB.NET
- 12. スパークリストアイテムの再読み込みでの効果の追加
- 13. ページを更新せずにjavascriptを再読み込みするには?
- 14. IPython/Jupyter Notebook:ドキュメントを再読み込みせずにマークダウンセルをレンダリングするには?
- 15. ウェブページを再読み込みせずにdivのコンテンツを変更するには?
- 16. ページを再読み込みせずにASP.NETでテキストボックスを挿入しますか?
- 17. ページを再読み込みせずにChromeのタブを複製しますか?
- 18. ページを再読み込みせずにwebviewアクティビティを切り替える
- 19. ページを再読み込みせずにページデータを消去しますか?
- 20. コンテンツページのみを読み込む方法(ツリーメニューを再ロードせずに)
- 21. ページを再読み込みせずに通知のようなフラッシュメッセージを送信
- 22. ページを再読み込みせずにデータをページ分割する方法は?
- 23. グリッドを再読み込みせずにpostdataを設定するコールバック?
- 24. Reload UITableViewビューを再読み込みせずにデータをロードしますか?
- 25. ヘッダー/フッターを再読み込みせずにページを変更しますか?
- 26. SSEの読み込みと追加
- 27. jqueryタブの追加と読み込み
- 28. WPFリストビュー、読み込み、保存、追加
- 29. テーブル、ブロック、タプルを読み込み
- 30. データベースの行を更新して再読み込みせずに表示
これを試してみるのはちょっと短かったので、バックグラウンドスレッドでデータを取得し、メインスレッドにアノテーションを表示しました。おそらくディスパッチキューに対する同様のアプローチ。それを解決策としてマークします。 – akdsouza
残念ながら、これは同時に100の注釈を追加/削除する問題を解決しません。あなたが言ったように、すべてのUI操作はメインスレッドになければなりません。これを解決するには、クラスタリングやその他の方法(画面の中央に最も近い最上位の50を表示)のいずれかを使用して、一度に画面上のピン数を制限するだけです。 – Sean
また、別のキューを必要としないので、単にdispatch_get_global_queueを使用してください – aryaxt