2014-02-21 27 views
0

我有一个MKMapView,但当用户第一次登录并允许定位服务时,它不显示位置。如果他们离开视线并回来,它就会起作用。我正在使用下面列出的内容来解决问题。它解决了这个问题,但用户无法再进行缩放,因为当更新位置时,会将其带回指定的位置。如何在进行滚动工作时解决第一个问题。第一次使用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]; 
} 

回答

1

不要使用位置经理所有。只需告诉地图视图来跟踪用户的位置。然后实现此委托方法:

- (void)mapView:(MKMapView *)mapView 
     didUpdateUserLocation:(MKUserLocation *)userLocation { 
    CLLocationCoordinate2D coordinate = userLocation.location.coordinate; 
    MKCoordinateRegion reg = 
     MKCoordinateRegionMakeWithDistance(coordinate, 600, 600); 
    mapView.region = reg; 
} 

现在,将继续努力,以每用户移动时设置的地图,所以如果你不希望这样,添加一个布尔开关,让你只能这样做第一时间(当地图第一个获取用户位置时)。

+0

我该如何使它只显示第一次? – matthew

+0

添加一个BOOL开关(一个作为标志的实例变量),以便您知道这是否是第一次。 – matt

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

注意这不要求你定期更新的位置。