23

此代码设置默认缩放级别,以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 公里(对于一系列纬度和 latitudeDelta 值,介于 22 和 23 公里之间)。这只发生在北纬地区(-80 工作得很好)。

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

4

4 回答 4

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

它会工作..

于 2012-11-07T08:43:44.283 回答
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];

尝试这个....

于 2012-11-07T09:37:27.750 回答
4

我的 iPhone4S 崩溃了,控制台显示了区域的 nan 值。在尝试了来自 SO 的大约 7 种不同的解决方案以及来自 Apple DTS 的各种建议后,我通过消除 regionThatFits 调用来解决它。我只是使用:

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

[_mapView setRegion:adjustedRegion animated:YES];

显然,该 regionThatFits 方法存在问题。

于 2012-12-12T03:54:19.423 回答
1

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

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];
于 2013-07-03T22:30:06.553 回答