連載
» 2015年01月20日 18時00分 公開

iPhone 6/6 Plusアプリ開発入門(3):Swiftでの変数の定義、Xcodeでのアウトレット接続、iOSシミュレーターへの画像素材追加 (2/3)

[平屋真吾,クラスメソッド株式会社]

MapViewの初期設定を記述する

 続いて、「viewDidLoad」メソッドにMapViewの設定に関するコードを追加します。「viewDidLoad」メソッド内の「// Do any additional ...」というコメント行の次に、以下の2行を追加します。

self.mapView.rotateEnabled = false
self.mapView.pitchEnabled = false

 これらは、MapViewの回転や3D表示を無効にするコードになります。MKMapViewクラスのrotateEnabledプロパティとpitchEnabledプロパティの型はBool型です。SwiftのBool型の変数(定数)が取り得る値は「true」または「false」だけです。ここではfalseを代入しています。

 続いて、以下の4行を追加します。これらは、MapViewに表示するRegion(中心座標および表示領域を示すもの)を指定するコードです。

let centerCoordinate = CLLocationCoordinate2D(latitude: 35.681382, longitude: 139.766084)
let initialSpan = MKCoordinateSpan(latitudeDelta: 0.4, longitudeDelta: 0.4)
let initialRegion = MKCoordinateRegion(center: centerCoordinate, span: initialSpan)
self.mapView.setRegion(initialRegion, animated: true)

 座標を表すCLLocationCoordinate2D構造体、表示領域を表すMKCoordinateSpan構造体を作成し、その2つからRegionを表すMKCoordinateRegion構造体を作成しています(ここでは東京駅の座標を指定しています)。

 これらの構造体は定数として作成しています。定数は一度値を代入すると、再代入することはできません。Swiftでは「不変な値」と「変更可能な値」を明確に区別します。

 コード追加後の「viewDidLoad」メソッドは以下のようになります。

override func viewDidLoad() {
  super.viewDidLoad()
  // Do any additional setup after loading the view, typically from a nib.
 
  self.mapView.rotateEnabled = false
  self.mapView.pitchEnabled = false
  let centerCoordinate = CLLocationCoordinate2D(latitude: 35.681382, longitude: 139.766084)
  let initialSpan = MKCoordinateSpan(latitudeDelta: 0.4, longitudeDelta: 0.4)
  let initialRegion = MKCoordinateRegion(center: centerCoordinate, span: initialSpan)
  self.mapView.setRegion(initialRegion, animated: true)
}

iOSシミュレーターで動作チェック

 ここで、ツールバーの[Run]ボタンをクリックしてアプリを実行してみましょう。iOSシミュレーター(iPhone 5s)の実行結果を図5に示します。MapViewが表示され、中心座標は東京駅(千代田区)になっています。

図5 iOSシミュレーター(iPhone 5s)の実行結果

マップにピンを立てる

 続いて、試しにマップ上にピンを追加してみます。「viewDidLoad」メソッドに以下のコードを追加します。

let pointAnnotation = MKPointAnnotation()
pointAnnotation.coordinate = centerCoordinate
pointAnnotation.title = "東京駅"
pointAnnotation.subtitle = "東京都千代田区丸の内"
self.mapView.addAnnotation(pointAnnotation)

 MKPointAnnotation型の定数を作成し、MapViewに追加しています。MKPointAnnotationはビューではなく、座標やタイトルなどを格納したオブジェクトです。場所に関する情報を格納したオブジェクトをMapViewに追加することで、標準的なピン型の注釈ビュー(MKPinAnnotationView)がMapView上に描画されます。

 コード追加後の「viewDidLoad」メソッドは以下のようになります。

override func viewDidLoad() {
  super.viewDidLoad()
  // Do any additional setup after loading the view, typically from a nib.
 
  self.mapView.rotateEnabled = false
  self.mapView.pitchEnabled = false
 
  let centerCoordinate = CLLocationCoordinate2D(latitude: 35.681382, longitude: 139.766084)
  let initialSpan = MKCoordinateSpan(latitudeDelta: 0.4, longitudeDelta: 0.4)
  let initialRegion = MKCoordinateRegion(center: centerCoordinate, span: initialSpan)
  self.mapView.setRegion(initialRegion, animated: true)
 
  // add Annotation
  let pointAnnotation = MKPointAnnotation()
  pointAnnotation.coordinate = centerCoordinate
  pointAnnotation.title = "東京駅"
  pointAnnotation.subtitle = "東京都千代田区丸の内"
  self.mapView.addAnnotation(pointAnnotation)
}

動作チェック

 再びアプリを実行してみます。iOSシミュレーター(iPhone 5s)の実行結果を図5に示します。東京駅の位置にピンが追加されました。

図6 iOSシミュレーター(iPhone 5s)の実行結果

コード削除

 ピンの追加が確認できたので、「MKPointAnnotationを追加するコード」は削除しておきましょう。

 コード削除後の「viewDidLoad」メソッドは以下のようになります。

override func viewDidLoad() {
  super.viewDidLoad()
  // Do any additional setup after loading the view, typically from a nib.
 
  self.mapView.rotateEnabled = false
  self.mapView.pitchEnabled = false
 
  let centerCoordinate = CLLocationCoordinate2D(latitude: 35.681382, longitude: 139.766084)
  let initialSpan = MKCoordinateSpan(latitudeDelta: 0.4, longitudeDelta: 0.4)
  let initialRegion = MKCoordinateRegion(center: centerCoordinate, span: initialSpan)
  self.mapView.setRegion(initialRegion, animated: true)
}

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。