【Swift】CLLocationManagerの使い方。現在地にピンを刺す。(Swift 2.1、XCode 7.2)

2020年6月16日

現在地にピンを刺す

前回の記事で、端末の位置情報を利用するための準備について説明した。⇒「記事

準備が整ったところで、端末の現在位置にピンを刺すものを実装する。以降の手順は「Map Kit Viewの使い方」の続きから行うので、実装を試してみる人は先に読んでおくことをお勧めする。

下図赤枠のinfo.plistをクリックしてプロパティ一覧を表示する。一覧にマウスカーソルを持っていくと下図黄緑枠の「+」ボタンが表示されるので押す。

Keyに「NSLocationWhenInUseUsageDescription」、Typeに「String」、Valueに「端末の位置を常に地図に表示するために位置情報を利用します。」を入力する。これは、位置情報サービスの設定項目に「このAppの使用中のみ許可」を追加するための設定である。

plistに項目を追加する

 

ViewController.swiftを以下のコードに変更する。

位置情報の取得はCLLocationManager(以下、ロケマネ)を利用する。ロケマネのインスタンスに対して位置情報の取得要求を行うとデリゲートメソッドの「位置情報取得時の呼び出しメソッド」が定周期で呼びだされる。

位置情報取得時の呼び出しメソッド」では、引数で渡ってきたlocationの座標をもとにピンを作成して地図に刺している。

なお、コード量を抑えるために、位置情報サービスがOFFだったり、位置情報取得が「許可しない」に設定されていたときの分岐処理は記述していない。必要な場合は「位置情報利用の準備」の記事を参考にされたし。

 

シュミレーターで位置情報のテストをするときに便利な機能がある。

「メニュー」⇒「Debug」⇒「Location」の選択肢からシミュレーターの位置情報を変えることができるのだ。「City Bicycle Ride」、「City Run」、「Freeway Drive」は道路を移動するように現在位置が変わるモード。今回は「Freeway Drive」に設定した。

シミュレーターのLocationをFreeway Driveに変更

 

以下は実際のプレイ動画

現在位置の軌跡に線を引く

先ほどの例は現在位置の座標にどんどんピンを刺していったが、端末は1個なのでピンも1個に作り変える。さらに、移動前と移動後の座標の間に直線を引いて移動の軌跡を描いてみよう。

ViewController.swiftを以下のコードに変更する。

annotationをクラス変数として保持するようにした。「位置情報取得時の呼び出しメソッド」の1回目の呼び出しではマップにannotationを追加し、直線は引かない。2回目以降はannotationを更新してピンを移動し、移動前と後の間に直線を引いている。

 

以下は実際のプレイ動画。1回目の直線が長くなるのが気になる。