2015-10-05 3 views
1

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

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

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

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

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

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

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

    region.span.latitudeDelta 7,439768

    region.span.longitudeDelta 11,0

  2. Фильтр точек :

    регион.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 - применен фильтр, когда я был в таблице, а затем перемещаться к карте: enter image description here

  2. Рисунок 2 - навигация к карте, а затем применяется фильтр: enter image description here

ответ

0

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

Когда 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 

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

Смежные вопросы