MapView返回当前位置注释?

时间:2012-01-17 23:40:07

标签: iphone cocoa-touch ipad mkmapview cllocationmanager

我要求我的MapView使用startUpdatingLocation的委托来显示我从CLLocationManager获取的用户的当前位置,并且我还在MapView中添加了一些注释,但问题是在地图中滚动以显示一些注释地图返回当前用户的注释

- (void)viewDidLoad
{
     [super viewDidLoad];

     // Get the location if the user
     _locationManager = [[CLLocationManager alloc] init];

     if ([CLLocationManager locationServicesEnabled]) 
     {
        _locationManager.delegate = self;
        [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
        [_locationManager startUpdatingLocation];
     }
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
      // set the map view to the current location
      MKCoordinateSpan span;
      span.latitudeDelta = 0.01;
      span.longitudeDelta = 0.05;

      MKCoordinateRegion region;
      region.span = span;
      region.center = _locationManager.location.coordinate;

      [self.mapView setRegion:region animated:YES];
}

2 个答案:

答案 0 :(得分:1)

如果获得更准确或最近的位置,或者显然设备正在移动,则可以多次调用didUpdateToLocation委托方法。

由于您无条件地在该委托方法中设置地图的区域,因此即使在用户或应用程序将地图平移或缩放到其他位置之后,地图也会在获得更新时平移回用户位置。

在该委托方法中,您可以通过添加bool ivar将其缩放到用户位置一次,以判断您是否已经缩放。

另一个选项是检查location的各种属性,例如timestamphorizontalAccuracy,如果这些值处于特定阈值,则只返回用户位置。

答案 1 :(得分:0)

您必须按照以下方法调用以下方法[_locationManager stopUpdatingLocation];: -

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
      [_locationManager stopUpdatingLocation];

      // set the map view to the current location
      MKCoordinateSpan span;
      span.latitudeDelta = 0.01;
      span.longitudeDelta = 0.05;

      MKCoordinateRegion region;
      region.span = span;
      region.center = _locationManager.location.coordinate;

      [self.mapView setRegion:region animated:YES];
}

因为一旦你开始更新位置...它每次都调用上面的函数。所以在调用这个函数之后你需要通过调用[_locationManager stopUpdatingLocation];方法来停止调用这个函数。