2013-12-22 4 views
5

私のアプリでマップ機能を実装しています。ここでは、ユーザーはパンニングによって現在の位置を設定できます。パンニング中にMKMapViewのcenterCoordinateをトラッキングする

今回は、centerCoordinateMKAnnotationを入れたいと思います。だから私がしたいのは、地図のcenterCoordinateがいつ変更されたかを把握し、注釈の座標を正しく変更することです。この動作は、Uber,Hailoなどの動作に似ています。

0.00001scenterCoordinateがすべてチェックされ、注釈も移動される時間ベースの実装を試しました。しかし、地図が穏やかにフリックされないと、注釈はある場所から別の場所にジャンプし、良いUIにはならない。

私が試した他の実装では、ジェスチャrecognisersとMKMapViewのデリゲートメソッド(regionDidChange/regionWillChange)によるものです。これは、やはり非常に突然の移行になります。

誰でもこの方法を教えてください。

答えて

24

実際のid<MKAnnotation>は使用しないことをおすすめします(少なくともこの「現在地設定」モードでは)。代わりに

  1. フロントマップビューのにピン(またはものは何でもあなたが好きなアイコン)の画像を含むビュー(。例えばUIImageView)を追加します。
  2. このピンビューはではありません。はマップビューのサブビューにする必要があります。
  3. ピンビューは、マップビューがサブビューのものと同じビューのサブビューである必要があります(たとえば、両方が同じスーパービューのサブビューである必要があります)。
  4. ピンビューはマップビューの中央より上に表示されるようにサイズと位置を調整する必要があります(ピンビューに同じフレームと地図ビューと同じ自動レイアウト/自動サイズ変更ロジックを持たせることができます。画面のサイズまたは方向の)。
  5. UIImageViewを使用する場合は、コンテンツモードを「center」に設定し、背景色を「clear」に設定します。
  6. ピンビューでユーザインタラクションが無効になっている必要があります。は、ユーザがその背後のマップビューとやりとりできるようにします。ユーザーが地図表示をパンまたはズームすると、前面のピン表示が即座に動いているように見えます。
  7. 必要に応じて、regionDidChangeAnimated:デリゲートメソッド(またはパン/ピンチジェスチャ認識ツール)のmapView.centerCoordinateから、またはユーザーが位置付けを完了したことを通知したときにのみ、アプリケーションが位置座標を取得できます。タイマー(特に0.00001秒ごと)を使用して現在の中心座標を照会することはお勧めしません。
  8. 現在の位置が最後に注釈を配置する場所であることをユーザが示した場合、その座標に実際の注釈を作成して追加し、「位置設定モード」ピン表示を非表示にすることができます。
+0

ハハ、十分です。私もこれを考えましたが、私はあまりにも頑固で、MKAnnotationの操作でそれを動作させたいと思っています。私に必要な軽い贈り物をくれてありがとう。ハッピーホリデー! –

+0

これはとてもうまく動作します。 – quantumpotato

関連する問題