MKMapView首次使用时出现问题

时间:2014-02-21 01:49:23

标签: ios mkmapview cllocationmanager

我有一个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];
}

2 个答案:

答案 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];

请注意,这并不要求您定期更新位置。