Вопрос KMLViewer

#ios #mkmapview #overlays

#iOS #mkmapview #наложения

Вопрос:

Это мой первый пост, и я, по общему признанию, выше головы, но мне действительно нужна помощь.

Я загрузил пример KMLViewer от Apple, чтобы посмотреть на наложения в картах. После того, как он заработал, в рамках моего «расследования», я затем добавил строку

 map = [[MKMapView alloc] initWithFrame:self.view.frame];
  

сразу после строки

 [super viewDidLoad];
  

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

В результате KMLViewer был скомпилирован и выполнен без ошибок, но больше не показывал наложения, созданные файлами kml. Если строка была удалена, оверлеи появлялись снова.

Чего я не понимаю?

Заранее спасибо за любую помощь.

Ответ №1:

Переменная map в KMLViewer объявлена как IBOutlet и подключена к MKMapView в xib. При повторном создании новый экземпляр больше не подключается к экземпляру в xib.

Наложения, вероятно, не отображаются, потому что:

  • делегат в новом экземпляре не установлен (поэтому viewForOverlay и т.д. не будет вызван)
  • новая карта не добавлена в качестве подвида

Итак, если вы добавили следующие две строки после alloc init, он должен начать работать снова:

 map.delegate = self;
[self.view addSubview:map];
  

Однако MKMapView в xib все еще будет находиться под новым экземпляром карты.