2017-08-31 3 views
1

J'ai créé un service de tuiles personnalisées et je l'ai ajouté à un mapView puis ça marche très bien. J'ai ensuite utilisé le même code et créé une bibliothèque de frameworks avec un type de retour MapView dans Xcode 8. J'ai ensuite utilisé un exemple d'application de test et importé cette bibliothèque et j'ai appelé la méthode utilisée dans library pour l'ajouter à mapView. Donc mon problème est quand je l'appelle et cette méthode pour Mapview il affiche la carte de MapKit pas ma carte personnaliséecomment utiliser MapView à partir d'une bibliothèque de frameworks Xcode8

Code utilisé dans la bibliothèque

import Foundation 
import MapKit 
public class mapLib: NSObject{ 

    public class func createMap(mapView: MKMapView) ->MKMapView{ 
     let mapView = mapView 
     //custom map URL 
     let template = "http://tile.openstreetmap.org/{z}/{x}/{y}.png" 
     let overlay = MKTileOverlay(urlTemplate: template) 
     overlay.canReplaceMapContent = true 
     mapView.add(overlay, level: .aboveLabels) 
     return mapView; 
    } 
} 

Code utilisé dans l'application

import UIKit 
import MapKit 
import mapLib 
class ViewController: UIViewController { 
    @IBOutlet weak var mapV: MKMapView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let view = mapLib.createMap(mapView: mapV) 
     mapV.addOverlays(view.overlays) 

     //any additional setup after loading the view, typically from a nib. 
    } 

Je dois préciser que la façon dont je vais aborder fonctionnerait ou n'importe quelle autre méthode pour le faire :)

Répondre

1

Il vous manque ajouter self comme delegate et implémenter la méthode func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer, vous pouvez le faire dans votre bibliothèque

quelque chose comme ça

import Foundation 
import MapKit 
public class mapLib: NSObject{ 

    public class func createMap(mapView: MKMapView) ->MKMapView{ 
     let mapView = mapView 
     //custom map URL 
     let template = "http://tile.openstreetmap.org/{z}/{x}/{y}.png" 
     let overlay = MKTileOverlay(urlTemplate: template) 
     overlay.canReplaceMapContent = true 
     mapView.add(overlay, level: .aboveLabels) 
     mapView.delegate = self 
     return mapView; 
    } 
} 

extension mapLib : MKMapViewDelegate{ 

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
     if let overlayTile = overlay as? MKTileOverlay{ 
      let overLayRenderer = MKTileOverlayRenderer(tileOverlay: overlayTile) 
      return overLayRenderer 
     } 

     return MKOverlayRenderer(overlay: overlay) 
    } 
} 
+0

maintenant l'application se est écrasé et dit « 0__abort_with_payload » – Saneth

+1

puis ajouter le délégué et l'implémentation dans votre viewController, et essayez, pour moi est difficile de tester votre configuration @Saneth –

+0

fonction mapView (_ mapview: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {...}. Y at-il un autre moyen d'ajouter cette méthode problème est dans – Saneth