[iOS][小ネタ] 地図アプリ作成時に役に立ちそうな MKMapView の 目的別実装例

2015.08.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

本記事では MKMapView (iOS 組み込みの地図 UI)を使ったアプリを作る際に役に立ちそうな実装の例を紹介します。

環境

  • OS X 10.10.5(14F27)
  • Xcode Version 6.4 (6E35b)
  • development target: iOS 8.4

コンビニや公共施設などの情報を MKMapView から消したい

MKMapView の showsPointsOfInterest プロパティを NO にします。コードでも Storyboard でも設定できます。

mkmapview1-05

showsPointsOfInterest = YES の場合は以下のような表示になります。

mkmapview1-06

showsPointsOfInterest = NO の場合は以下のような表示になります。

mkmapview1-07

MKMapView で表示中の注釈(アノテーション)オブジェクトを取得したい

mkmapview1-04

MKMapView の visibleMapRect プロパティを使用すれば、地図の表示領域を表す MKMapRect を取得できます。

また、MKMapView の annotationsInMapRect: メソッドを使用すれば、指定した範囲 (MKMapRect) の注釈オブジェクトを取得できます。

- (NSArray *)visibleAnnotations
{
MKMapRect visibleMapRect = self.mapView.visibleMapRect;
NSSet *visibleAnnotationSet = [self.mapView annotationsInMapRect:visibleMapRect];

return visibleAnnotationSet.allObjects;
}

ユーザーの現在位置を MKMapView 上に表示したい

MKMapView の 設定を変更

MKMapView の showsUserLocation プロパティを YES にします。コードでも Storyboard でも設定できます。

mkmapview1-00

Info.plist に Key と Value を追加する

位置情報を使用する目的を指定するための Key と Value を Info.plist に追加します。

以下のどちらかの Key を追加します。

  • NSLocationWhenInUseUsageDescription
  • アプリの使用中のみ許可
  • NSLocationAlwaysUsageDescription
  • 常に許可

Value には位置情報の使用目的を記述します。ここで指定した文字列は許可を求めるアラート上に表示されます。

以下の例では、アプリの使用中のみ許可してもらうための NSLocationWhenInUseUsageDescription を指定しています。

mkmapview1-01

NSLocationWhenInUseUsageDescription
ユーザーの位置をMKMapView上に表示します。

CLLocationManager のメソッドを使用して位置情報使用許可をリクエストする

CLLocationManager には以下の2つのメソッドが用意されています。どちらかのメソッドを使用して許可を要求します。

  • requestWhenInUseAuthorization
  • アプリの使用中のみ許可してもらうよう要求
  • requestAlwaysAuthorization
  • 常に許可してもらうよう要求
#import "ViewController.h"

@import MapKit;

@interface ViewController ()

@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (nonatomic) CLLocationManager *locationManager;

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];

self.locationManager = [CLLocationManager new];
[self.locationManager requestWhenInUseAuthorization];

}

動作を確認する

許可を要求をしたタイミングで、以下のようなアラートが表示されます。

mkmapview1-02

「許可」を選択すると、MKMapView 上にユーザー位置が表示されます。

mkmapview1-03

参考記事

まとめ

以上、MKMapView に関する小ネタ集でした。