我要求我的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];
}
答案 0 :(得分:1)
如果获得更准确或最近的位置,或者显然设备正在移动,则可以多次调用didUpdateToLocation
委托方法。
由于您无条件地在该委托方法中设置地图的区域,因此即使在用户或应用程序将地图平移或缩放到其他位置之后,地图也会在获得更新时平移回用户位置。
在该委托方法中,您可以通过添加bool ivar将其缩放到用户位置一次,以判断您是否已经缩放。
另一个选项是检查location
的各种属性,例如timestamp
或horizontalAccuracy
,如果这些值处于特定阈值,则只返回用户位置。
答案 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];
方法来停止调用这个函数。