プロジェクトに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にしています。
Copyright © ITmedia, Inc. All Rights Reserved.