我正在使用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];
}
答案 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比分为拉特和长传时,你将在非洲加纳南部海洋中间的一个位置。