我正在使用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时,你将到达非洲加纳南部海洋中央的一个地点。