我有一个MKMapView但是当用户第一次登录并允许位置服务时,它不会显示位置。如果他们离开视图并返回,它就可以了。我正在使用下面列出的内容来解决问题。它解决了问题但随后用户无法再缩放,因为当位置更新时,它会将它们带回指定的位置。在滚动工作时如何解决第一个问题。
以下是我正在使用的内容:
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
MKUserLocation *myLocation = [self.schoolMap userLocation];
CLLocationCoordinate2D coord = [[myLocation location] coordinate];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(coord, 9000, 9000);
[self.schoolMap setRegion:region animated:NO];
}
答案 0 :(得分:1)
根本不要使用位置管理器。只需告诉地图视图即可跟踪用户的位置。然后实现这个委托方法:
- (void)mapView:(MKMapView *)mapView
didUpdateUserLocation:(MKUserLocation *)userLocation {
CLLocationCoordinate2D coordinate = userLocation.location.coordinate;
MKCoordinateRegion reg =
MKCoordinateRegionMakeWithDistance(coordinate, 600, 600);
mapView.region = reg;
}
现在,每次用户移动时都会继续尝试设置地图,所以如果您不想这样做,请添加一个BOOL开关,这样您第一次只能这样做(当地图第一次< / em>获取用户位置。)
答案 1 :(得分:0)
您可能在设置区域时未收到用户的位置。有一种方法可以处理这种情况,让mapView显示用户的位置,如下所示:
CLLocation *location = [[self.schoolMap userLocation] location];
bool hasLocation = location!=nil;
if (!hasLocation) {
[self.mapView showsUserLocation];
} else {
CLLocationCoordinate2D zoomLocation = location.coordinate;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 2000, 2000);
[self.mapView setRegion:viewRegion animated:NO];
请注意,这并不要求您定期更新位置。