1. ホーム
  2. ios

[解決済み] iOSでユーザーから現在地を取得する方法

2022-04-22 18:23:41

質問

iOSでユーザーから現在地を取得するにはどうすればよいですか?

どのように解決するのですか?

RedBlueThingの回答は、私にとって非常に効果的でした。以下は、私が行った方法のサンプルコードです。

ヘッダー

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface yourController : UIViewController <CLLocationManagerDelegate> {
    CLLocationManager *locationManager;
}

@end

メインファイル

initメソッドで

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];

コールバック関数

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    NSLog(@"OldLocation %f %f", oldLocation.coordinate.latitude, oldLocation.coordinate.longitude);
    NSLog(@"NewLocation %f %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
}

iOS 6

iOS 6 では、delegate 関数が非推奨となりました。新しいデリゲートは

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

したがって、新しい位置を取得するためには

[locations lastObject]

iOS 8

iOS 8 では、場所の更新を開始する前に、明示的に許可を求める必要があります。

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    [self.locationManager requestWhenInUseAuthorization];

[locationManager startUpdatingLocation];

の文字列も追加する必要があります。 NSLocationAlwaysUsageDescription または NSLocationWhenInUseUsageDescription のキーをアプリのInfo.plistに追加します。それ以外の場合は startUpdatingLocation は無視され、デリゲートはコールバックを受け取りません。

そして最後に、場所の読み取りが終了したら、適切な場所で stopUpdating location を呼び出します。

[locationManager stopUpdatingLocation];