所以从我在这里看到的多个答案来看,这是如何在应用程序加载时居中和缩放用户位置,并且效果很好。
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
NSLog(@"Did update user location");
MKCoordinateRegion mapRegion;
mapRegion.center = mapView.userLocation.coordinate;
mapRegion.span.latitudeDelta = 0.2;
mapRegion.span.longitudeDelta = 0.2;
[map setRegion:mapRegion animated: YES];
}
但是当你每次调用这个委托方法开始玩地图时,它会把我带回用户位置。如果我停止用户位置更新,我该如何处理?我试过把这个代码放在视图中加载,所以我得到初始缩放和中心,但它不起作用?或者也许我可以将代码放在另一个地图套件代理方法中,我只是不知道正确的代理方法。其他人如何做到这一点?
答案 0 :(得分:2)
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
每次用户的位置发生变化时,都会调用mapKit委托方法。这就是为什么您的地图会在每次通话时都以用户的位置为中心。您无法使用该功能,以便在应用启动时在用户的位置初始化地图。
我认为如果它没有在viewDidLoad上工作,那是因为那时应用还不知道用户的位置。在那里放一个断点,亲眼看看。
对我来说,你应该在应用获取用户位置数据时调用的viewDidLoad中添加一个观察者
// Check if user authorized use of location services
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized) {
// Add observer
[self.mapView.userLocation addObserver:self
forKeyPath:@"location"
options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
context:NULL];
}
然后在
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context;
等待keyPath" location"被叫。 当它第一次触发时,加载视图并且应用知道用户的位置。然后,您可以将代码置于用户位置的中心位置。 但是请确保删除观察者,这样它就不会多次接听电话。
[self.mapView.userLocation removeObserver:self
forKeyPath:@"location" context:NULL];