无法使用Google Maps API for iOS获取当前位置坐标

时间:2014-06-09 01:09:50

标签: ios google-maps ios7 google-maps-sdk-ios

我尝试过以下代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    mapView_.myLocationEnabled = YES;

    CLLocation *myLocation = mapView_.myLocation;
    NSLog(@"%f %f",myLocation.coordinate.latitude, myLocation.coordinate.longitude);
}

记录的输出为0.000000 0.000000。

我还检查了位置服务已启用的设置,并且还显示为我的应用启用了。

请帮我弄清楚我哪里出错了。

2 个答案:

答案 0 :(得分:3)

viewDidLoad中始终显示为0,0,您必须使用KVO来观察坐标。请尝试以下代码: -

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self.mapView addObserver:self forKeyPath:@"myLocation" options:NSKeyValueObservingOptionNew context: nil];
}

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [self.mapView removeObserver:self forKeyPath:@"myLocation"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"myLocation"] && [object isKindOfClass:[GMSMapView class]])
    {
        NSLog(@"KVO triggered. Location Latitude: %f Longitude: %f",self.mapView.myLocation.coordinate.latitude,self.mapView.myLocation.coordinate.longitude);
    }
}

答案 1 :(得分:1)

设备和应用程序需要一段时间才能确定您的位置。它在启动时将无法使用。您需要听取位置的变化。

此答案描述了myLocation更改时的通知方式:

https://stackoverflow.com/a/15291319/148241