Help us understand the problem. What is going on with this article?

iOS 11で大幅に強化されたMapKit

More than 1 year has passed since last update.

※本記事は、一般に公開されている情報を元に作成しています。記事中の画像はWWDCのスライドのものを引用させて頂いております

WWDC 2017 で発表された iOS 11 では MapKit も色々と強化されています。以下にその内容をまとめます。

Map Type に .mutedStandard 追加

MKMapType に mutedStandard が追加されました。

image.png

標準のマップアプリで言う「交通機関」のような見た目になるようです。

コンパス、スケールバーなどがコントロール可能に

新たに3つのクラスが追加されました。

  • MKUserTrackingButton
  • MKCompassButton
  • MKScaleView

image.png

MKUserTrackingButton

トラッキングモード(現在値を追従)に切り替えるボタンです。

使用例:

let button = MKUserTrackingButton(mapView: mapView)
self.view.addSubview(button)

iOS 5からあった MKUserTrackingBarButtonItem は UIBarButtonItem ベースであるため、ツールバーの上にしか置けませんでした。一方 MKUserTrackingButton は UIView ベースなので、地図上の好きな場所に設置できます。

MKCompassButton

方位を示すコンパスのボタン。今までコンパスは右上固定でしたが、iOS 11から好きな場所に設置できるようになります。

使用例:

let compass = MKCompassButton(mapView: mapView)
compass.compassVisibility = .visible
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: compass)
mapView.showsCompass = false

compassVisibility プロパティには、次の3つの値をセットすることができます。

image.png

  • .hidden - 常に非表示
  • .visible - 常に表示
  • .adaptive - 地図の方位を動かしたとき(北が上ではない状態)だけ表示。タップすると元の状態に戻り、コンパスは非表示になる

MKScaleView

地図の縮尺を表すスケールバー

使用例:

let scale = MKScaleView(mapView: mapView)
scale.legendAlignment = .trailing
view.addSubview(scale)

legendAlignment プロパティには、次の2つの値をセットすることができます。

image.png

  • .leading - 0を左起点にする
  • .trailing - 0を右起点にする

※ただし、アラビア語の場合は左右が逆になるようです

Marker Annotation View の登場

MKMarkerAnnotationView が追加されました。

image.png

従来の MKPinAnnotationView と比べると、だいぶ大きいですね。

image.png

Title, Subtitle は titleVisibility, subtitleVisibility で「表示/非表示/必要なときだけ表示」を設定できます。

もちろん色指定もできます。(namedでの指定がiOS 11からできるようになりました)

image.png

glyphText プロパティに文字をセットすることで、Annotation の中を自由に書き換えられます。デフォルト(nil)を指定すると、ピンのアイコンになります。

image.png

glyphImage を使えば画像をセットすることもできます。

image.png

WebAPIからPOIの画像を取ってきて Annotation の中に動的にセットする、といったことが簡単にできるようになりますね。

Annotation に優先度を設定できるように

次の図のように、Annotation が密集して見にくい場合があると思います。

image.png

こんなとき、優先度を設定することにより、どの Annotation を優先的に表示するかを設定できるようになりました。

(緑のAnnotationの優先度を「High」に設定した場合)
image.png

優先度は displayPriority で設定できます。

image.png

  • required - 必ず表示
  • defaultHigh - 優先度高
  • defaultLow - 優先度低

Annotation をまとめられるようになった

次の例のように、地図の縮尺に合わせて Annotation をまとめられるようになりました!(個人的に一番嬉しいアップデート)

demo.gif

clusteringIdentifier 単位でひとつにまとめられます。

すべての clusteringIdentifier に identifier を設定した例:
image.png

また、衝突判定(円形or矩形)も collisionMode で設定できます。

.circle:
image.png

.rectangle
image.png

所感

iOS 10 ではあまり動きがなかった MapKit ですが、iOS 11 では嬉しいアップデートが盛り沢山ですね。
iOS 11 がどれくらいのスピードで普及していくかはわかりませんが、ぜひ有効に使っていきたいものです。

リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした