#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 все еще будет находиться под новым экземпляром карты.