iOS 使用 CLLocation 和 MapView 一起获取坐标和更新地图

Posted

技术标签:

【中文标题】iOS 使用 CLLocation 和 MapView 一起获取坐标和更新地图【英文标题】:iOS Using CLLocation & MapView together to get coordinates and update map 【发布时间】:2014-01-14 14:53:00 【问题描述】:

我有一个应用程序需要做两件事;

    获取当前位置 将 Mapview 更新到该位置

我正在使用以下代码;

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation     *)newLocation fromLocation:(CLLocation *)oldLocation

    CLLocation *currentLocation = newLocation;
    if (currentLocation != nil) 
    NSLog(@"%.8f", currentLocation.coordinate.longitude);
    NSLog(@"%.8f", currentLocation.coordinate.latitude);
    NSLog(@"%f", currentLocation.speed);

    MKCoordinateRegion mapRegion;
    mapRegion.center.longitude = currentLocation.coordinate.longitude;
    mapRegion.center.latitude = currentLocation.coordinate.latitude;
    mapRegion.span.latitudeDelta = 0.03;
    mapRegion.span.longitudeDelta = 0.03;
    [_mapView setRegion:mapRegion animated: YES];


一切都如我所料,除了一件事。当 MapView 区域更新时,MAP 会移动,但 PIN 不会。最终,用户 pin 离开了屏幕,因为地图正在沿着坐标移动。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

在您设置_mapView 区域的位置下方,您还应该使用currentLocation 创建一个新注释并将其添加到_mapView。代码应该是这样的,

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation     *)newLocation fromLocation:(CLLocation *)oldLocation

    CLLocation *currentLocation = newLocation;
    if (currentLocation != nil) 
    NSLog(@"%.8f", currentLocation.coordinate.longitude);
    NSLog(@"%.8f", currentLocation.coordinate.latitude);
    NSLog(@"%f", currentLocation.speed);

    MKCoordinateRegion mapRegion;
    mapRegion.center.longitude = currentLocation.coordinate.longitude;
    mapRegion.center.latitude = currentLocation.coordinate.latitude;
    mapRegion.span.latitudeDelta = 0.03;
    mapRegion.span.longitudeDelta = 0.03;
    [_mapView setRegion:mapRegion animated: YES];

    MyAnnotation *ant = [[MyAnnotation alloc] initWithCoordinate:currentLocation.coordinate];
    [_mapView addAnnotation:ant];

【讨论】:

以上是关于iOS 使用 CLLocation 和 MapView 一起获取坐标和更新地图的主要内容,如果未能解决你的问题,请参考以下文章

CLLocation 区域监控在 iOS 5.1 和 iOS 6 中的行为不同

CLLocation 在我的 xamarin.ios 项目中为 Null

iOS MapKit 与CLLocation 获取的位置不同

iOS CLLocation 属性不保留值

CLLocation Manager 有时会给出不正确的位置

iOS - CLLocation Manager didUpdateLocations 调用了太多时间