为什么MKMapView让我入海?

Tho*_*son 6 iphone mapkit mkmapview

我有这个代码来设置用户位置的地图:

MKCoordinateSpan span;
span.latitudeDelta=0.2;
span.longitudeDelta=0.2; 

CLLocationCoordinate2D location=mapView.userLocation.coordinate;
location = mapView.userLocation.location.coordinate;

MKCoordinateRegion region;
region.span=span;
region.center=location;

[mapView setRegion:region animated:TRUE];
[mapView regionThatFits:region];
Run Code Online (Sandbox Code Playgroud)

现在,当我这样做时,mapView.showsUserLocation=YES它显示我在正确位置的位置(在我的设备上,以及模拟器中的苹果公司),但是,上面的代码两次都把我放在非洲附近的某个海域!

有任何想法吗?

Dan*_*Ray 14

纬度/经度对0/0位于英格兰格林威治以南的赤道上.那个地方位于非洲西海岸的几内亚湾.如果这是您的引脚放置的位置,那么您的mapView.userLocation未设置.

可能你的代码在MKMapKit有机会获得它的位置之前就已经运行了.你真正想要做的是有你的viewController采用的MKMapKitDelegate协议,将.delegate您的地图视图的财产self,然后实现方法:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
Run Code Online (Sandbox Code Playgroud)

当地图工具包找到用户时,将调用该方法,您可以使用在此处传递的userLocation值来设置地图上的区域.然而,在第一次调用之前,MapView仍然在定位自己,而你对它的位置的询问是不成熟的.

此外,您所在的地区最终到达的地方是无操作.该方法不会调整区域的大小,它实际上会返回一个已调整大小的区域,供您使用.因此,您希望将地图视图的区域设置为该方法返回的内容.像这样:

[mapView setRegion:[mapView regionThatFits:region] animated:TRUE];
Run Code Online (Sandbox Code Playgroud)