iOS8でMKMapViewで現在地に移動しない
- 2014.12.21
- 未分類
MKMapViewを使用していて、初期表示をユーザの初期位置にしたかったので、いろいろ調べてやっとこさ対応完了。iOS8から色々と変わっていました。AutoLayoutといい、iOS4を中心に開発していた身としては、たくさん変更があってシンドいです。
iOS8からロケーションマネージャの権限取得が必要
iOS8からはロケーションマネージャの権限取得が必要です。
// viewDidLoadなどに。 self.locationManager = [[CLLocationManager alloc] init];<br>self.locationManager.delegate = self; if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { // iOS バージョンが 8 以上 // 位置情報取得の許可を求めるメッセージを表示する [self.locationManager requestWhenInUseAuthorization]; } else { // iOS バージョンが 8 未満 [self.locationManager startUpdatingLocation]; } } // マップにユーザの現在地を表示<br>self.mapView.showsUserLocation = YES;
// LocationManagerのデリゲート - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) { [self.locationManager startUpdatingLocation]; } else if (status == kCLAuthorizationStatusNotDetermined) { // アプリ使用中だけ位置情報取得の許可を求める。 [manager requestWhenInUseAuthorization]; } } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *location = [locations lastObject]; // 現在地のリージョンを設定 MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude), 1000, 1000); [self.mapView setRegion:region animated:YES]; // 初回だけなので、止める [self.locationManager stopUpdatingLocation]; }
さらに、Info.plistに記述が必要です。「NSLocationWhenInUseUsageDescription」に許可を求める際に表示するメッセージを入力する必要があります。ここでは「位置情報を取得します。」という意味不明なメッセージに仮置き。
実行してみると、
「許可」をタップで、現在地に移動ーーーー、、、、、、、、あれ?しない。。。。
いろいろ考えた末の結論としては、シミュレーターでは動かない?
実機では問題なく移動しました。
-
前の記事
vmware toolsのインストールで、initctl:job failed to start 2014.12.07
-
次の記事
addGestureRecognizerしたViewでボタンが反応しない時 2014.12.23