2017-09-10 2 views
3

J'ai trouvé un moyen de mettre en cache des tuiles avec MapKit, mais je n'ai trouvé aucune solution pour charger toutes les tuiles dans une zone à partir des tuiles de niveau supérieur aux tuiles de niveau inférieur.Charger toutes les mosaïques pour la zone dans mapView

Je souhaite mettre en cache toutes les mosaïques d'une zone rectangle dans ma vue cartographique. Y a-t-il un moyen de le faire dans Mapkit?

+0

s'il vous plaît partager le code que vous avez essayé –

Répondre

1

Pour charger des tuiles personnalisées dans MKMapView vous devez sous-classe MKTileOverlay et remplacer la méthode url(forTilePath path: MKTileOverlayPath) -> URL

MKTitleOverlay contient x, y et z propriétés pour la tuile. Ainsi, la mise en œuvre peut ressembler à ceci:

override func url(forTilePath path: MKTileOverlayPath) -> URL { 
    let tilePath = Bundle.main.url(
    forResource: "\(path.y)", 
    withExtension: "png", 
    subdirectory: "tiles/\(path.z)/\(path.x)", 
    localization: nil)! 
    return tile 
} 

Dans votre fonction de réglage mapView ajouter ce qui suit:

let overlay = CustomTileOverlay() 
overlay.canReplaceMapContent = true 
mapView.add(overlay, level: .aboveLabels) 

aussi ne pas oublier de retourner dans renderer

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
    return MKTileOverlayRenderer(tileOverlay: overlay) 
} 

post-scriptum Il ya un grand tutoriel sur raywenderlich.com sur ce sujet:

+0

Votre réponse n'a pas répondu directement à ma question, mais vous avez lié un article me donnant des conseils sur la façon dont je pouvais au moins aller plus loin mon défi;) Merci! –