iOS - некоторые плитки не отображаются в пользовательском MKTileOverlay
У меня есть собственный MKTileOverlay в моем проекте iOS, использующем MapKit, он работает нормально большую часть времени. Однако, после увеличения / уменьшения масштаба и панорамирования карты, некоторые плитки не отображаются.
Сначала я подумал, что это простой случай, когда плитки не загружаются, поэтому я создал подкласс MKTileOverlay и добавил логирование в консоли. Он показал, что все плитки были загружены идеально и доставлены в блок результатов.
Поскольку у меня заканчивались идеи, я создал локальный генератор плиток, который просто возвращает изображения с их путями x/y/z и нарисованным кадром, чтобы увидеть, какие плитки отсутствуют.
Пример изображения отсутствующей плитки
К сожалению, проблема сохраняется даже с локально сгенерированными плитками, поэтому она не имеет ничего общего с подключением к Интернету. Другое странное поведение состоит в том, что если у меня есть два пользовательских наложения друг на друга, это будут точно такие же плитки, которые не будут отображаться на обоих наложениях.
Единственное решение, о котором я могу думать прямо сейчас, - это создание подкласса рендерера плиток и обеспечение того, чтобы все отображалось, поскольку невозможно узнать, что плитка не визуализирована. Это, однако, звучит как большая работа и своего рода задача "изобретать велосипед"...
1 ответ
Мы также столкнулись с проблемой пропущенных тайлов - пытаясь нарисовать тайлы карт вокруг Новой Зеландии. MKOverlayRenderer даже не запрашивал плитки. Мы спустились по кроличьей норе, думая, что это должно быть потому, что Новая Зеландия находится вблизи границы широты 180/0. Нету. Это было потому, что субклассический метод:
- (void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData * __nullable data, NSError * __nullable error))result;
Всегда должен вызывать метод результата, даже если нет данных для возврата! Чтобы отдать кредит там, где он нужен, это было для нас источником решения: