[iPhone] 現在地をMapKitで地図表示する

例えばお店の位置を知らせる地図は緯度経度からすぐにできますが、自分が今どこにいるのか知りたいという場合には、ユーザー許可を取得したりして少し手間がかかります。
 

Swift 5.1
Xcode 11.3.1

 

requestWhenInUseAuthorization

 
ある決まった場所を地図で紹介するときは緯度経度が確定しているので簡単にできました。
 

iOSには地図を表示するために MapView が用意されています。Swift で簡単に地図が作れるのでやってみましょう。  
 
では、ユーザーが今いるところが知りたいケースではどうするのでしょうか。
 
ユーザー許可のリクエスト
位置情報は(少なくとも日本では)個人情報保護の観点から、ユーザー許可を取る必要がでてきます。
NSLocationWhenInUseUsageDescription をKeyとして、説明をInfo.plistに書き込みます。これは位置情報を取得するときのユーザーへの説明です。こっそり裏で位置情報を取ることはできません(審査で落ちるでしょう)
 
Info.plist

 
これを呼び出すためのコードは

 
notDeterminedのステータスが返ってきたら
requestWhenInUseAuthorization()
を投げて許可を求めるダイアログを表示させます。

カレンダーアプリなのに位置情報を取得しようとするとユーザーが疑問を持ちますので、アプリのこういった機能のためであるなど、理由を説明することができます。
 

 
userLocation.coordinate
固定の緯度経度を設定したCLLocationCoordinate2Dの代わりに、現在位置はこれを使って取得できます。
また、ユーザーが移動して位置が変わった時も追従するように設定。
startUpdatingLocation()

常に追従させていく方法として、トラッキングモードも設定できます。
MKUserTrackingMode.follow
MKUserTrackingMode.followWithHeading
 
NativeのMapsアプリではSafeAreaを考慮して実装してありました(あたりまえ!)
それを参考に、Portraitではtopとbottomには地図を表示させないようにしました。
 
ちなみに、Mapsではtopは薄く透明にしてbottomはSearchバーを置いています。
 

サンプルコード

 

位置情報は今では個人情報ですが以前はなあなあだった時もあります。

Simulatorでテストするとエラーになります。

 
これは実際の位置情報が重要だということでしょう、実機で試せば大丈夫です。

ViewController.swift

 

 
 

References:
MKMapView – MapKit | Apple Developer Documentation
MKUserTrackingMode – MapKit | Apple Developer Documentation

一人でアプリ開発の限界を感じたら

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンライン・スクールがいいと思います。


TECH ACADEMY
自宅にいながら1時間でプログラミング基礎を習得

こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン



とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約20,000名の受講生と300社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


無料で転職まで
これはiOSアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールでエンジニアになって職を得たいのであれば手っ取り早いかもしれません


誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:


シェアする

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

フォローする