如何使用CoreLocation查找当前位置

Ale*_*izi 34 xcode location core-location cllocationmanager

我需要找到我当前的位置CoreLocation,我尝试了多种方法,但到目前为止我CLLocationManager只返回0 ..(0.000.00.000).

这是我的代码(更新后工作):

进口:

#import <CoreLocation/CoreLocation.h>
Run Code Online (Sandbox Code Playgroud)

宣布:

IBOutlet CLLocationManager *locationManager;
IBOutlet UILabel *latLabel;
IBOutlet UILabel *longLabel;
Run Code Online (Sandbox Code Playgroud)

功能:

- (void)getLocation { //Called when needed
    latLabel.text  = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.latitude]; 
    longLabel.text = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.longitude];
}

- (void)viewDidLoad {
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*izi 77

您可以使用以下方式找到您的位置CoreLocation:

进口CoreLocation:

#import <CoreLocation/CoreLocation.h>
Run Code Online (Sandbox Code Playgroud)

声明CLLocationManager:

CLLocationManager *locationManager;
Run Code Online (Sandbox Code Playgroud)

初始化locationManagerin viewDidLoad并创建一个函数,该函数可以return将当前位置设置为NSString:

- (NSString *)deviceLocation {
    return [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude];
}

- (void)viewDidLoad
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)

并调用该deviceLocation函数将按预期返回位置:

NSLog(@"%@", [self deviceLocation]);
Run Code Online (Sandbox Code Playgroud)

这只是一个例子.在CLLocationManager没有用户准备好的情况下进行初始化并不是一个好主意.当然,locationManager.location.coordinate可以在初始化之后用于获取latitude和随意.longitudeCLLocationManager

不要忘记CoreLocation.framework在Build Phases选项卡(Targets->Build Phases->Link Binary)下添加项目设置.


Tho*_*asW 15

使用CLLocationManager,您无需立即获取位置信息.获取位置信息的GPS和其他设备可能未初始化.他们可能需要一段时间才能获得任何信息.相反,您需要创建一个响应的委托对象,locationManager:didUpdateToLocation:fromLocation:然后将其设置为位置管理器的委托.

看到这里

  • 本文http://mobileorchard.com/hello-there-a-corelocation-tutorial/(取自相关的stackoverflow问题)显示了该做什么. (2认同)