ios – MKMapView显示保存不正确的区域

当我的iPhone应用程序关闭时,我将地图区域保存为用户默认值:
MKCoordinateRegion region = mapView.region;
[[NSUserDefaults standardUserDefaults] setDouble:region.center.latitude forKey:@"map.location.center.latitude"];
[[NSUserDefaults standardUserDefaults] setDouble:region.center.longitude forKey:@"map.location.center.longitude"];
[[NSUserDefaults standardUserDefaults] setDouble:region.span.latitudeDelta forKey:@"map.location.span.latitude"];
[[NSUserDefaults standardUserDefaults] setDouble:region.span.longitudeDelta forKey:@"map.location.span.longitude"];

当应用再次启动时,Ш以相同的方式读取这些值,以便用户可以看到与上次完全相同的地图视图:

MKCoordinateRegion region;

region.center.latitude  = [[NSUserDefaults standardUserDefaults] doubleForKey:@"map.location.center.latitude"];
region.center.longitude = [[NSUserDefaults standardUserDefaults] doubleForKey:@"map.location.center.longitude"];
region.span.latitudeDelta  = [[NSUserDefaults standardUserDefaults] doubleForKey:@"map.location.span.latitude"];
region.span.longitudeDelta = [[NSUserDefaults standardUserDefaults] doubleForKey:@"map.location.span.longitude"];

NSLog([NSString stringWithFormat:@"Region read  : %f %f %f %f",region.center.latitude,region.center.longitude,region.span.latitudeDelta,region.span.longitudeDelta]);

[mapView setRegion:region];

NSLog([NSString stringWithFormat:@"Region on map: %f %f %f %f",mapView.region.center.latitude,mapView.region.center.longitude,mapView.region.span.latitudeDelta,mapView.region.span.longitudeDelta]);

从用户默认值读取的区域(不奇怪)与保存时完全相同.请注意,保存的内容直接来自地图,因此不会以任何方式进行转换.我用setRegion:方法将其设置回地图,但是它是不同的!

示例结果:

Region read  : 50.241110 8.891555 0.035683 0.042915<br>
Region on map: 50.241057 8.891544 0.050499 0.054932

有人知道为什么会这样吗?

解决方法

这里的问题是当您设置区域时,地图缩放级别“捕捉”到最接近的缩放阈值. (我怀疑这些缩放阈值是您双击或双指敲击时获得的缩放量)

因此,如果地图显示缩放级别1,并且您将区域设置为相同的跨度值:region = [mapView region]; [mapView setRegion:region];它将“捕捉”到最高1级以上的缩放级别,即2级,您将缩小约2倍.

原始海报的

解决方法

是在设置区域之前稍微减小跨度值,以便在视图弹出时,它会锁定到其所在的缩放级别,而不是上面的缩放级别.

例如

region.span.latitudeDelta = [[NSUserDefaults standardUserDefaults] doubleForKey:@“map.location.span.latitude”] * 0.999;

region.span.longitudeDelta = [[NSUserDefaults standardUserDefaults] doubleForKey:@“map.location.span.longitude”] * 0.999;

如果用户使用双抽头进行了缩放(因此从阈值跳到阈值),这很好,几乎完全将它们返回到相同的视图.

但是,如果缩放比例缩小,并且视图位于缩放阈值之间,则它仍然会弹出到下一级.在这种情况下不太好,但还没有修复.

苹果雷达上出现了一些bug,希望在未来的版本中修复.

以上是来客网为你收集整理的ios – MKMapView显示保存不正确的区域全部内容,希望文章能够帮你解决ios – MKMapView显示保存不正确的区域所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。