MKMapView有时会缩放到用户位置有时会缩放到不知道的地方



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

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

我以前遇到过这个问题。似乎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;
    }
}

viewDidLoad中设置isShowUserLocation = YES。这确保了用户位置在输入时显示一次,也可以在需要时选择性地显示。

编辑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交互时,你可能需要处理一些细节问题。

当你长时间经过0时,你将到达非洲加纳南部海洋中央的一个地点。

相关内容

  • 没有找到相关文章

最新更新