2

我正在使用地图视图,有时我的地图会在我打开它时放大到我的用户位置,但有时它会放大到海洋中间。我不知道是什么原因造成的,这是我用于缩放的代码。我不希望地图跟踪用户,而只是在他们打开地图后缩放到他们的位置

-(void) viewDidAppear:(BOOL)animated{

MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.userLocation.coordinate, 600.0f, 600.0f);
[self.mapView setRegion:region animated:YES];

 }

 -(void) viewDidLoad{

[super viewDidLoad];

self.mapView.delegate = self;
[self.mapView setShowsUserLocation:YES];

 }
4

2 回答 2

3

我以前遇到过这个问题。似乎 mapView 有时加载和检测用户位置的速度很慢,导致您的代码在地图视图可以检查用户位置之前viewDidAppear被执行。因此,在海洋中的斑点。

准备好后最好使用 mapView 的委托来显示用户位置:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if(isShowUserLocation)
    {
        MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 600.0, 600.0);
        [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
        isShowUserLocation = NO;
    }
}

设置isShowUserLocation = YESviewDidLoad. 这可确保用户位置在输入时显示一次,并在您需要时选择性地显示。

编辑1:

@implementation MapViewController
{
    BOOL isShowUserLocation;
}

-(void) viewDidLoad
{
    [super viewDidLoad];
    self.mapView.delegate = self;
    [self.mapView setShowsUserLocation:YES];
    isShowUserLocation = YES;
}

编辑2:

或者,使用 CLLocationManager - 见这篇文章。它允许您停止更新。一定要包含 CoreLocation.framework。不过,在将 CLLocationManager 与 MapView 交互时,您可能需要处理一些细节问题。

于 2014-03-30T05:04:36.233 回答
2

当您通过 0 表示经纬度时,您将在非洲加纳以南的海洋中间找到一个位置。

于 2014-03-30T02:43:41.970 回答