iOS6中的MapView不会在纬度处显示某些缩放级别> 75北

时间:2012-09-24 16:17:37

标签: ios mkmapview mapkit ios6 ios6-maps

此代码设置以viewDidLoad中指定位置为中心的默认缩放级别。 该代码在以前版本的iOS中运行良好:

CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];

但是,在iOS6中,对于纬度高于75(> 75.1)的位置,应用程序会崩溃并显示以下消息:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'

我发现,对于给定的缩放级别mapView,无法在内部设置正确的MKCoordinateRegion[mapView regionThatFits:region]将所有值都返回为nan。如果我直接使用region变量,它只显示默认地图(整个世界)。

经过一些测试后,我发现通过调整visibleDistance我可以让代码正常工作。魔法距离似乎略高于20公里(对于一系列纬度和纬度的Delta值,大约在22到23公里之间)。 这只发生在北纬地区(-80可以正常工作)。

初始定位后,地图可在任何位置工作。看起来Apple改变了可见地图区域的初始化方式。我正在为受影响的区域使用更高的缩放级别作为解决方法。有没有其他方法可以使它正常工作?

4 个答案:

答案 0 :(得分:5)

CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];

它会起作用..

答案 1 :(得分:5)

CLLocationCoordinate2D southwest, northeast;
southwest.latitude = 34.172684;
southwest.longitude = -118.604794;
northeast.latitude = 34.236144;
northeast.longitude = -118.500938;
BSForwardGeocoderCoordinateBounds *bounds = [BSForwardGeocoderCoordinateBounds boundsWithSouthWest:southwest northEast:northeast];

试试这个......

答案 2 :(得分:4)

我的iPhone4S和控制台崩溃,显示了区域的纳米值。在尝试了SO的7种不同解决方案和Apple DTS的各种建议后,我通过消除regionThatFits调用解决了这个问题。我只是用过:

CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion adjustedRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, visibleDistance, visibleDistance);

[_mapView setRegion:adjustedRegion animated:YES];

显然,regionThatFits方法存在问题。

答案 3 :(得分:1)

我在中文网站上找到了这个代码的版本,它似乎对我有用。当NAN返回时,他只绕过sizeThatFits,因此只在必要时进行调整,如果这个bug被Apple修复(假设它是一个bug),那么它根本就不是问题。

MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(coordinate, mapSizeMeters, mapSizeMeters);

MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];

if (isnan(adjustedRegion.center.latitude)) {
    // iOS 6 will result in nan. 2012-10-15
    adjustedRegion.center.latitude = viewRegion.center.latitude;
    adjustedRegion.center.longitude = viewRegion.center.longitude;
    adjustedRegion.span.latitudeDelta = 0;
    adjustedRegion.span.longitudeDelta = 0;
}


[mapView setRegion:adjustedRegion animated:YES];