blog

iPhoneでCoreLocation その2~方位情報取得~

2011.04.20

デバイスソリューション部 モバイルソフトウェアデザイングループの小田です。

前回はCoreLocationの位置情報の取得について紹介しました。
今回はCoreLocation第2回として方位情報の取得についてコンパスアプリを作りながら紹介したいと思います。

まずView-Baced Applicationプロジェクトを作成します。(今回のプロジェクト名はCompassとしています)

次に前回同様、CoreLocation.framworkをプロジェクトに追加しましょう。

Interface BuilderによるViewの配置

Interface BuilderでLocationViewController.xibのレイアウトを次のように配置します。

CompassViewControllerのヘッダの宣言

 CompassViewController.hは次のようになります。
 今回もCLLocationManagerクラスとCLLocationManagerDelegateプロトコルを使用します。

CompassViewControllerの実装

 viewDidLoadでロケーションマネージャーを作成します。

 前回の位置情報取得の場合は位置情報サービスが有効かどうかをチェックしていましたが、今回は方位情報取得可能かどうかをチェックしてdelegateの設定、方位情報取得を開始します。

 方位情報のチェックにはheadingAvailableを使用しますが、これも前回同様、headingAvailableプロパティがiOS4.0以降で非推奨となるので、iOS4.0以前ではプロパティ、iOS4.0以降ではクラスメソッドと使い分けるようにしてください。

CLLocationManagerDelegateの実装

 方位情報取得で使用するCLLocationManagerDelegateプロトコルのメソッドは次の2つです。

 方位情報が取得されるとlocationManager:didUpdateHeading:が呼ばれます。実装は次のようになります。

 newHeadingに新しい方位情報が入っているのでこれを利用してラベルに値の表示、コンパスの画像の回転を行います。

 取得した角度で回転しようとすると逆方向に回転してしまうのでマイナスした角度をCGAffineTransformMakeRotation()で指定しましょう。

 locationManagerShouldDisplayHeadingCalibration:ではキャリブレーションが発生したときに次の画像のアラートを表示するかどうかを指定します。このメソッドの戻り値がYESで表示、NOで非表示です。

 これで完成です。実際に動かしてみます。

 画像だと分からないですが、ちゃんと向きを変えるとその方向にアニメーションしてます。

 前回から2度に渡ってCoreLocationについて紹介しましたがいかがでしたでしょうか。次回はユニバーサルアプリの作り方について紹介したいと思います。