正确恢复MKMapView可见状态/区域

时间:2011-06-20 15:52:53

标签: objective-c cocoa-touch mkmapview viewstate uiinterfaceorientation

我有一个小应用程序,它显示了一个MKMapView实例(map)。为了保存状态,我尝试将map.region保存到NSUserDefaults。这样可以很好地将单个值存储为双精度数。启动时,应用程序会合并数字并生成有效的MKCoordinateRegion。这发生在application:didFinishLaunchingWithOptions:中。现在有几个问题。

1)想象一下:您将应用程序保持横向状态。该应用会保存相应的MKCoordinateRegion。该应用程序已终止。现在,在启动应用程序时,保持iPad格局,地图与离开应用程序之前的状态不同。不,这不是regionThatFits:的问题。我跟踪它,这就是发生的事情:当用户看不到它时,应用程序以纵向模式启动。该应用程序恢复他的状态。之后,地图将旋转为横向模式。

换句话说,该应用程序会保存横向状态,但会将其恢复为纵向状态。如果重复这些步骤,则每次启动时地图都会缩小。不是最好的用户体验。

2)即使问题是通过以正确的方向恢复来解决,仍然存在发射方向可能与离开方向不同的问题。我认为解决此问题的更好方法之一是在用户离开横向时也始终存储纵向方向的值。通过这样做,状态将被正确恢复,因为系统最初以纵向方式启动应用程序。

如果应用程序处于横向状态,一种可能的方法是更改​​纬度/经度值。但这太不准确了,因为如果它们是纬度或经度,CLLocationDegrees会有所不同。

另一种方式(我认为这将是最好的方法)是“模拟”mapview的旋转或者在应用程序离开时计算肖像模式的可见区域。但我真的不知道该怎么做。这是我需要你的帮助和想法的地方。

我欣赏每一丝希望。 :) - 如果我想错误的方向,请告诉我。

1 个答案:

答案 0 :(得分:2)

嗯。如果我正确理解了您的问题,那么您将保存MKMapView的region(即centerspan),并希望使用这些值来恢复地图的中心和< em>缩放级别,与用户是否在会话之间旋转设备无关。

您是否尝试计算地图矩形的宽高比,然后将更改乘以跨度?也就是说,如果您的地图在横向模式下的边界大小为800 x 600,那么您将经度Delta乘以600/800(0.75)并将纬度Delta乘以800/600(1.33)以获得600 x的适当跨度800纵向模式的矩形。