MKMapView показывают неправильно сохраненный регион

Мое предложение для Вас, чтобы сделать некоторые автоматизированные тесты сначала. Используйте селен для него.

Тогда развертывают сетку селена для тестирования в нескольких компьютерах одновременно.

, Хотя Селен, поскольку автоматизированный инструмент тестирования будет работать довольно быстро, делая мини-стресс-тест. При помещении той же автоматизации, работающей на нескольких компьютерах в сети одновременно, Вы будете в состоянии видеть, как это ведет себя.

, Если Вы хотите записать синхронизации ответа, у них есть прохладный API, который можно использовать для записи некоторых сценариев для выполнения автоматизации.

Редактирование: Селен довольно прост в использовании, и он делает утверждает для подкачки страниц содержания, если Вы хотите протестировать содержание. Это также копирует Ваше перемещение через страницу, если бы Вы желаете (это было бы моим предложением), просто перемещаются по странице много, и затем сохраняют его для автоматизации. Постарайтесь не помещать, утверждает, таким образом, селен мог бы работать быстрее.

15
задан gbk 8 September 2015 в 12:43
поделиться

4 ответа

У меня была такая же проблема. Это очень расстраивает. Кажется, что документация для MKMapView неверна в некоторых областях, касающихся типов данных.

Если вы установите параметры региона как (double) s, вы получите ошибку. Однако, если параметры региона переданы (float), вы получите правильное поведение.

Так что попробуйте

MKCoordinateRegion region = {{0.0f,0.0f},{0.0f,0.0f}};

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

mapView.region = region;
2
ответ дан 1 December 2019 в 04:53
поделиться

Я не могу проверить, работает ли это. Кто-нибудь еще может это сделать? Я готов поспорить, что то, что вы видите, - это эффект усечения ваших двойников на числа с плавающей запятой. В некоторых случаях, когда это происходит со мной, я обнаружил, что могу умножить диапазон на 0,9999 и сбросить регион, и тогда это будет то, что я хочу. Но не во всех регионах - иногда все очень по-разному, до 20%, особенно для небольших пролетов.

0
ответ дан 1 December 2019 в 04:53
поделиться

The issue here is when you set the region, the map zoom level "snaps" out to the nearest zoom threshold. (I suspect these zoom thresholds are the amounts of zoom you get when you double-tap or two-finger-tap)

So if the map is showing zoom level 1 for instance, and you set the region to that same span value thusly: region = [mapView region]; [mapView setRegion:region]; it will "snap" out to the nearest zoom level above level 1, i.e. level 2 and you will zoom out by about a factor of two.

The workaround for the original poster is to reduce the span values slightly before setting the region, so that when the view snaps out, it snaps out to the zoom level it was on, not the one above.

e.g.

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

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

If the user had been zooming with double-taps (and hence jumping from threshold to threshold) this works pretty well, returning them to the same view almost exactly.

However if they pinch-zoom and the view is halfway between the zoom thresholds it will still snap out to the next level. Not so good in that case but there is no fix as yet.

There are open bugs on Apple radar for this, hopefully it will be fixed in a future release.

8
ответ дан 1 December 2019 в 04:53
поделиться

Хорошо, я уже некоторое время борюсь с этой проблемой и думаю, что нашел эффективное обходное решение, вдохновленное теорией Крафти ( Показ MKMapView сохранен неправильно регион ). По сути, если вы установите область представления карты со значениями, которые вы получаете из ваших NSUserDefaults после того, как представление карты выполнило свою начальную загрузку (в комплекте с поведением «вытаскивания»), область карты будет такой, какой вы ожидаете от нее. . Уловка состоит в том, чтобы найти перехватчик в коде вашего приложения где-нибудь ниже по течению от инициализированного вида карты. Не очень красиво, но у меня он отлично работает. Спасибо Крафти за понимание.

2
ответ дан 1 December 2019 в 04:53
поделиться