此代码设置以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改变了可见地图区域的初始化方式。我正在为受影响的区域使用更高的缩放级别作为解决方法。有没有其他方法可以使它正常工作?
答案 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];