プロジェクトにPhotoAnnotationView.swiftファイルを追加しましょう。ファイルの追加手順はPhotoAnnotation.swiftファイルを追加した手順と同様です。
クラスのオプションについて以下のように入力します。PhotoAnnotationViewはMKAnnotationViewのサブクラスとして作成します。
「PhotoAnnotationView.swift」ファイルがプロジェクトに追加されました。MapKitをimportしていないのでエラーが出ていますがこれは後ほど修正します。
実装する内容は以下の通りです。PhotoAnnotationクラスと同様に順に説明していきます。
import UIKit
import MapKit
class PhotoAnnotationView: MKAnnotationView {
class var size :CGSize {
return CGSize(width: 44.0, height: 44.0)
}
var thumbnailImage: UIImage? {
didSet {
self.thumbnailImageView.image = self.thumbnailImage
}
}
private let thumbnailImageView: UIImageView!
override init(annotation: MKAnnotation!, reuseIdentifier: String!) {
super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
self.frame = CGRect(origin: self.frame.origin, size: PhotoAnnotationView.size)
self.canShowCallout = true
self.rightCalloutAccessoryView = UIButton.buttonWithType(.DetailDisclosure) as UIView
self.thumbnailImageView = UIImageView(frame: CGRect(origin: CGPointZero, size: PhotoAnnotationView.size))
self.thumbnailImageView.contentMode = .ScaleAspectFill
self.thumbnailImageView.clipsToBounds = true
self.addSubview(self.thumbnailImageView)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder: NSCoder) {
super.init(coder: coder)
}
override func prepareForReuse() {
self.thumbnailImage = nil
}
}
MapKitフレームワークをimportする記述を追加します。
sizeプロパティは「タイププロパティ」として定義しています。タイププロパティはクラスそのものに定義するプロパティです。タイププロパティとしてクラスにプロパティを追加するには、プロパティ定義の「var」の前に「class」を追加します。
sizeプロパティは、(どのインスタンスであるかにかかわらず)固定のサムネイルサイズを提供するようにしたいので、タイププロパティとして定義しています。
privateなプロパティの追加定義(9〜15行目)
MKAnnotationView自体にもimageプロパティが定義されていますが、今回は新たに「thumbnailImage」というプロパティを追加して使用します。
thumbnailImageプロパティはnilの場合があり得るのでUIImage?型にしています。
thumbnailImageViewプロパティはクラスの内部からしか使用せず、一度初期値を入れた後は再代入しないので「private」と「let」を指定しています。プロパティやメソッドに「private」を指定することで、同じファイルからのみアクセスを許可できます。
また、thumbnailImageViewプロパティは初期化が失敗しない限りnilにならないのでUIImageView!型にしています。
引数が「annotation」「reuseIdentifier」のイニシャライザーはMKAnnotationViewクラスで定義されているものをオーバーライドして使用するので「override」を指定しています。
18行目でスーパークラスの同名のイニシャライザーを呼び出し、20行目で自分自身のサイズを指定のサイズに変更しています。
22〜23行目は注釈ビューをタップしたときに注釈ビューから引き出される形で表示される「吹き出し」に関する設定です。
また、25〜28行目ではUIImageViewの初期化と初期設定を行っています。
直接使用するわけではありませんが、実装が必須なので追加しています。
注釈ビューはMapViewによって管理され、必要に応じて使い回されます。「prepareForReuse」メソッドは再利用される前に呼ばれるので、thumbnailImageの値をnilにしています。
アプリは、どうやって動くの? プログラムって何?――初めてiPhoneアプリを作る人向け基礎知識まとめ
iOSアプリにフォトショの機能などを組み込めるCreative SDKの基礎知識とインストール
iPhoneアプリで位置情報と地図を使うための基礎知識
開発者視点で見る、あのドデカい「iPhone 6/6 Plus」
【図解】Xcode 4.5の使い方リファレンス超まとめ
Android化が進むiOS 7の新機能と開発環境Xcode 5Copyright © ITmedia, Inc. All Rights Reserved.