Восстановите MKMapView видимое состояние / регион правильно - PullRequest
1 голос
/ 20 июня 2011

У меня есть небольшое приложение для iPad, которое показывает экземпляр MKMapView (map). Чтобы сохранить состояние, я пытаюсь сохранить map.region в NSUserDefaults. Это работает очень хорошо, сохраняя только одинарные значения в виде двойных. При запуске приложение объединяет числа и выдает действительный MKCoordinateRegion. Это происходит в application:didFinishLaunchingWithOptions:. Сейчас есть несколько проблем.

1) Представьте себе: вы оставляете приложение в альбомной ориентации. Приложение сохраняет соответствующий MKCoordinateRegion. Приложение прекращено. Теперь, удерживая планшет iPad, запуская приложение, карта не показывает то же состояние, что и до выхода из приложения. И нет, это не проблема regionThatFits:. Я разыскал его, и вот что происходит: также, когда он не виден пользователю, приложение запускается в портретном режиме. Приложение восстанавливает его состояние. После этого карта поворачивается в ландшафтный режим.

Другими словами, приложение сохраняет ландшафтное состояние, но восстанавливает его в портретном. Если вы повторите эти шаги, карта будет уменьшаться при каждом запуске. Не лучший UX.

2) Даже если бы проблему удалось решить, восстановив правильную ориентацию, все еще существует проблема, заключающаяся в том, что ориентация запуска может отличаться от ориентации ухода. Я думаю, что один из лучших способов решить эту проблему - всегда сохранять значения для книжной ориентации, даже когда пользователь уходит в альбомной ориентации. При этом состояние будет восстановлено должным образом, потому что приложение изначально запускается системой в портретном режиме.

Одним из возможных способов было бы изменить значения широты / долготы, если приложение оставлено в альбомной ориентации. Но это было бы слишком неточно, потому что CLLocationDegrees отличаются, если они широта или долгота.

Другим способом (и я думаю, что это будет наилучшим способом) было бы «смоделировать» вращение вида карты или вычислить видимую область для портретного режима, когда приложение оставлено. Но я действительно не знаю, как это сделать. Здесь вам нужна ваша помощь и ваши идеи.

Я ценю каждый луч надежды. :) - И, пожалуйста, скажите мне, если я думаю, что в неправильном направлении.

1 Ответ

2 голосов
/ 21 июня 2011

Хм.Если я правильно понимаю ваш вопрос, вы сохраняете MKMapView region (то есть его center и span) и хотели бы использовать эти значения для восстановления центра карты и уровня масштабирования , независимо от того, вращает ли пользователь устройство между сеансами.

Вы пытались вычислить отношение ширины к высоте прямоугольника вашей карты, а затем умножить изменения на промежуток?То есть, если ваша карта имеет границы размером 800 x 600 в альбомном режиме, вы умножите longitudeDelta на 600/800 (0,75) и latitudeDelta на 800/600 (1,33), чтобы получить соответствующий диапазон для 600 x800 прямоугольник в портретном режиме.

...