iPhone 6/6 PlusアプリをSwift言語で作成してみたいという初心者向けにiOS 8の新機能を使ったアプリの作り方を一から解説する入門連載。今回は、前回の記事で追加した地図上の「注釈」を写真のサムネイルに差し替える課程でSwiftのカスタムクラスの作成手順について解説します。
前回の記事「OptionalなどSwiftとObjective-Cの違いを意識してPhotos Frameworkを使う」では「Photos Framework」の機能を使用してフォトライブラリから写真情報を取り出し、写真情報にひも付いた座標にピンを表示しました。また、Swiftの特徴の一つである「Optional型」について解説しました。
図1は前回の記事の時点でのPhotoMapアプリの実行結果です。今回は地図上のピン状の画像を写真のサムネイルに差し替えていきます。
その前に、MapViewで使用するオブジェクトについて整理してみます。
これまでの連載では、地図上の単一の座標に表示するコンテンツのことを「ピン」と記述していましたが、アップル公式のドキュメントである「位置情報とマッププログラミングガイド」に合わせて「注釈」と記述することにします。
注釈を使用することで、特定の座標位置を目立たせ、その場所に関する情報を提供できます。
本連載で作成する「PhotoMap」アプリの場合は、「写真の撮影場所」を表示するために注釈を使用します。
地図に注釈を表示するには、注釈1つに対して「注釈オブジェクト」「注釈ビュー」の2つのオブジェクトが必要です。「データを管理するオブジェクト」と「ビュー」が切り離されていて、オブジェクトを効率よく管理できるようになっています。
項目 | 内容 | 標準的なクラス |
---|---|---|
注釈オブジェクト | 注釈のデータを管理するオブジェクト | MKPointAnnotation |
注釈ビュー | 地図上に注釈の可視表現を描画するビュー | MKPinAnnotationView |
前回の記事の実装では、MKPointAnnotationおよびMKPinAnnotationViewを使用していましたが、今回の記事では注釈オブジェクト・注釈ビュー共にカスタムクラスを作成します。理由は以下の通りです。
項目 | 今回作成するクラス |
---|---|
注釈オブジェクト | PhotoAnnotation |
注釈ビュー | PhotoAnnotationView |
カスタムの注釈オブジェクト・注釈ビューを使用して、地図に注釈を追加する大まかな流れは以下の通りです。
1.は前回記事で「prepareAnnotations」メソッドとして実装した処理です。フォトライブラリから取り出したPHAssetが保持する位置情報を使用して、MKPointAnnotationをMapViewに追加しました。
private func prepareAnnotations() { let fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: nil) fetchResult?.enumerateObjectsUsingBlock ({result, index, stop in if let asset = result as? PHAsset { if let location = asset.location { let annotation = MKPointAnnotation() annotation.coordinate = location.coordinate self.mapView.addAnnotation(annotation) } } }) }
今回はカスタムの注釈ビューを使用して注釈の可視表現を実現するので、さらに「2.」と「3.」の処理が必要です。
とはいえ、今回必要なことはViewContorollerクラスに「mapView:viewForAnnotation:メソッド」を追加し、「注釈ビューのセットアップと更新処理」を記述することだけですので比較的簡単です。
カスタムクラスを作る場合は、.swiftファイルを追加してクラスを定義します。すでにあるクラスのサブクラスとして定義することもできますし、プロトコルを使って「特定の用途に合ったクラス」を定義することもできます。
クラスには主に、プロパティ、イニシャライザー、メソッドが必要となります。最初にimport文を使う場合が多くなります。
「イニシャライザー」はクラスを「初期化」するためのメソッドで「init」という名前になります。
以降、PhotoAnnotationとPhotoAnnotationViewを具体例として解説します。
Copyright © ITmedia, Inc. All Rights Reserved.