目标c-正确恢复MKMapView可见状态/区域



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

1)想象一下:你把应用程序放在横向。应用程序保存相应的MKCoordinateRegion。应用程序已终止。现在,拿着iPad的风景,启动应用程序,地图显示的状态与离开应用程序前不同。不,这不是regionThatFits:的问题。我追踪到了它,结果就是这样:当用户看不到它时,应用程序会以人像模式启动。应用程序会恢复他的状态。之后,地图将旋转到横向模式。

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

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

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

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

我感激每一线希望如果我想错了方向,请告诉我。

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

你有没有试过计算地图矩形的宽高比,然后乘以跨度的变化?也就是说,如果你的地图在横向模式下有800 x 600的边界,那么你应该将纵向delta乘以600/800(0.75),将横向delta乘以800/600(1.33),以获得纵向模式下600 x 800矩形的适当跨度。

最新更新