Пользовательские фрагменты карты не отображаются - PullRequest
0 голосов
/ 11 февраля 2020

Я разработал приложение, которое использует пользовательскую карту, составленную из объектов MKTileOverlay, которые имеют размер карты 256x256. Все работало нормально, пока я не обновил свою цель iPhone до iOS 13. После этого, когда я запускаю майское приложение, карта корректно отображается на экране. Но когда я немного перемещаюсь, чтобы показать другие части карты, некоторые плитки начинают отображаться, как на картинке ниже. Я уверен, что изображение для не показанной плитки находится в пакете ресурсов, а ее правильный URL-адрес возвращается в приведенном ниже коде.

Кто-нибудь еще сталкивался с этой проблемой?

enter image description here

А вот код, связанный с плитками карты (забавно c setupTileRenderer () вызывается в viewDidLoad ()):

func setupTileRenderer() {
    let overlay = MapTilesOverlay()
    tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
    overlay.minimumZ = 8
    overlay.maximumZ = 11
    mapView.add(overlay, level: .aboveLabels)
}


func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if overlay is MapTilesOverlay {
        // Overlay is a map tile
        return tileRenderer
    }
}


class MapTilesOverlay: MKTileOverlay {
    override func url(forTilePath path: MKTileOverlayPath) -> URL {

        // Locate a matching tile in the resource bundle
        let tilePath = Bundle.main.url(
            forResource: "\(path.y)",
            withExtension: "png",
            subdirectory: "MapTiles/\(path.z)/\(path.x)",
            localization: nil)

        guard let tile = tilePath else {
            // If a tile is not provided, it’s replaced by a transparent tile.
            return Bundle.main.url(
                forResource: "TransparentTile",
                withExtension: "png",
                subdirectory: "MapTiles",
                localization: nil)!
        }
        return tile
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...