位置情報で遊んでみる その1
どうにも明確な目的が無いとフラフラしがちです。
今回はiPhoneの位置情報機能で遊んでみることにします。
地図を表示する
まずは画面に地図を表示します。
プロジェクトは適当にSingle View Applicationなどで作成。
まずはLibrariyに以下を追加します。
- CoreLocation.framework
- MapKit.framework
地図自体は、StoryboardのViewControllerにMap ViewをドラッグアンドドロップすればOK。
大きさを適当に決めて、下にはボタンとか置いちゃいます。
ViewControllerにMap、ボタンをそれぞれ関連づけしておきます。
(この時"<MapKit/MapKit.h>"をインポートしていないとエラーになります)
後は実行すればAppleのMapアプリでおなじみの地図が表示されます。
ユーザーの現在位置を取得する
ユーザーを追跡するには、CLLocationManagerDelegateとCLLocationManagerを使用します。
CLLocationManagerDelegateは、MKMapViewDelegateとともに継承しておきます。
MainViewController.m
@interface MainViewController () < CLLocationManagerDelegate, MKMapViewDelegate> @property (weak, nonatomic) IBOutlet MKMapView *mmvMap; @property (weak, nonatomic) IBOutlet UIBarButtonItem *btnCurrentLocation; @property (weak, nonatomic) IBOutlet UIBarButtonItem *btnStartLogging; @property (weak, nonatomic) IBOutlet UIBarButtonItem *btnStopLogging; @property (strong, nonatomic) CLLocationManager *clmLocationManager; - (IBAction)btnCurrentLocationTouched:(id)sender; - (IBAction)btnStartLoggingTouched:(id)sender; - (IBAction)btnStopLoggingTouched:(id)sender; @end @implementation MainViewController - (void)viewDidLoad { [self prepareLocationManager]; [super viewDidLoad]; } - (void)prepareLocationManager { _clmLocationManager = [[CLLocationManager alloc] init]; _clmLocationManager.delegate = self; // 位置情報の更新頻度 _clmLocationManager.activityType = CLActivityTypeAutomotiveNavigation; // 位置情報取得の最短距離(m) _clmLocationManager.distanceFilter = kCLDistanceFilterNone; // 位置情報の取得制度 _clmLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; }
これで準備はOK。
あとはstartUpdatingLocationで位置情報の更新が開始されます。
また、更新を止めたい場合は、stopUpdatingLocationで止めることができます。
以下のように、ボタンでOn/Off切り替えられるようにしてみました。
MainViewController.m
- (IBAction)btnStartLoggingTouched:(id)sender { // 位置情報の更新を開始する [_clmLocationManager startUpdatingLocation]; // 停止ボタンをEnabledにする _btnStartLogging.enabled = NO; _btnStopLogging.enabled = YES; } - (IBAction)btnStopLoggingTouched:(id)sender { // 位置情報の更新をストップする [_clmLocationManager stopUpdatingLocation]; // 開始ボタンをEnabledにする _btnStartLogging.enabled = YES; _btnStopLogging.enabled = NO; }
シミュレータで現在位置を指定する
デフォルトでは、iOSシミュレータで実行すると現在位置が無しの状態で表示されます。
デバッグ>位置>位置情報をカスタマイズ で緯度、経度を入力することで任意の位置を現在地に指定できます。