mapkit: регион, который подходит не отображается правильно

У меня есть кусок кода, который определяет оба лучших region.span.latitudeDelta а также region.span.longitudeDelta, Он находит верхний левый и нижний правый и принимает разность между широтными координатами и длинными координатами.

У меня проблема в том, что рендеринг фактически отличается от того, что я установил при выполнении:

region = self.regionThatFits(region)
self.setRegion(region, animated: true)

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

Более того, если я отрисовываю все точки на карте, затем выбираю несколько и отрисовываю выделенные, затем удаляю фильтры и отрисовываю все, карта не такая, какой была при запуске - она ​​показывает все точки, но она меньше (выглядит уменьшенным) по сравнению с первоначальным видом.

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

  1. Загрузить все точки:

    region.span.latitudeDelta 7.439768

    region.span.longitudeDelta 11,0

  2. Точки фильтра:

    region.span.latitudeDelta 1.25

    region.span.longitudeDelta 10.50477

  3. Удалить фильтр:

    region.span.latitudeDelta 7.439768

    region.span.longitudeDelta 11,0

Я попытался перецентрировать карту по фиксированной координате перед повторным рендерингом (а не только в viewDidLoad), но это не имело никакого значения.

Я хотел бы подчеркнуть, что карта не продолжает уменьшаться при каждом запуске вышеуказанной последовательности. Это как-то уменьшает масштаб изображения и все.

Есть ли очевидный шаг, который я пропускаю? Скрытый логический тип, который мне нужно установить? Что-то другое?

Я также попытался перейти с regionThatFits на

regionToRender = MKCoordinateRegionMake(region.center, region.span)

И я попробовал следующее:

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
        self.mapView.region = mapView.region
}

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

Ниже приведены два изображения из разных сценариев. Любые советы будут с благодарностью.

Спасибо!

  1. Рисунок 1 - применил фильтр, пока я был в таблице, а затем перешел на карту: введите описание изображения здесь

  2. Рисунок 2 - навигация к карте и применение фильтра: введите описание изображения здесь

1 ответ

После обширной отладки, охватывающей, помимо прочего, макеты, рамки и границы, происходит следующее:

Когда ViewController, содержащий карту, загружается впервые, карта фактически не соответствует представлению. Чтобы быть точным, он загружен в свободном виде, который составляет 600x492 WxH соответственно. Высота 492 это просто:

free form height - NavCon Height - ToolBar Height - default margin (battery etc.)

После первого прохода аннотации рендеринга (фактически в viewDidAppear) MapView получает правильную высоту (на iphone 4s) из 372. Это просто:

screen height (480) - NavCon Height - ToolBar Height - default margin

В результате любой рендеринг с этой точки приведет к эффекту уменьшения масштаба (заставляя все выглядеть меньше).

Решение состоит в том, чтобы вычислить размер, который mapView получит и установит в viewDidLoad. Кроме того, вам, вероятно, следует также установить маску автоматического изменения размера mapView в соответствии с родительским представлением:

self.mapView.autoresizingMask = self.view.autoresizingMask

Я надеюсь, что вы найдете это полезным.

Другие вопросы по тегам