アプリ

MKMapViewでアノテーションやユーザーの位置をすべて表示する拡大率にする方法

  • このエントリーをはてなブックマークに追加
  • LINEで送る

おはようございます。菅原です。

iOSの地図系のアプリを作っている時に、
地図上の全てのアノテーションとユーザーの位置を含めた拡大率にする機能を実装して
ちょっと躓いたので、解決方法を残しておきたいと思います。

結論から先に言えば、これで完了です。

self.mapView.showAnnotations(self.mapView.annotations, animated: true)

一見すると、self.mapView.annotationsにはユーザーの位置が含まれないのでは?
と思ってしまいそうですが、なんと含まれてます。

なので、地図上に1本もアノテーションがない状態で
上記のようにshowAnnotationsを呼んでもちゃんとユーザーの位置まで地図を移動してくれます。

ここからは試行錯誤した記録

ボツ案

self.mapView.annotationsにユーザーポジションは含まれないと思い込んでいた頃のソース

//ピンの配列をコピーしておきます
var tmpArr:[MKPointAnnotation] = self.annotationArr

//仮のピンを生成
var userPos:
MKAnnotation = MKAnnotation()
userPos.coordinate  = myLocationManager.location.coordinate
self.mapView.addAnnotation(userPos)
tmpArr.append(userPos)

//全てのピンを表示範囲に収める
self.mapView.showAnnotations(tmpArr, animated: true)

annotationArrという配列に、地図上のアノテーションを保持しておき
それをいったん一時的な配列に複製して、そこにユーザーの位置を示すピンを追加して、
showAnnotationsするという作戦でした。

これでも動きますが、こうするメリットは謎です。

このコードで得られた事としては、地図にaddAnnotationしてないピンをshowAnnotationsすると
エラーになるということぐらいです。
当たり前といえばそうですが、地図上にないのに表示できるわけがないですね…

  • このエントリーをはてなブックマークに追加
  • LINEで送る
%d人のブロガーが「いいね」をつけました。