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

时间:2014-03-30 02:22:58

标签: ios objective-c xcode mkmapview mkcoordinateregion

我正在使用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];

 }

2 个答案:

答案 0 :(得分: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 = YES中设置viewDidLoad。这可确保用户位置在进入时显示一次,并在您需要时有选择地显示。

修改1:

@implementation MapViewController
{
    BOOL isShowUserLocation;
}

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

编辑2:

或者,使用CLLocationManager - 请参阅this post。它允许您停止更新。包括CoreLocation.framework。在将CLLocationManager与MapView进行交互时,您可能需要处理一些细节问题。

答案 1 :(得分:2)

当你传球0比分为拉特和长传时,你将在非洲加纳南部海洋中间的一个位置。