2017-08-31 2 views
1

私はカスタムタイルサービスを作成し、それをmapViewに追加しました。私は同じコードを使用し、Xcode 8でMapViewの戻り値の型を持つフレームワークライブラリを作成しました。次に、サンプルテストアプリケーションを使用してそのライブラリを読み込み、ライブラリで使用されたメソッドを呼び出してmapViewに追加しました。 だから私が呼ぶとき、私の問題があり、それをMapViewのために、その方法はMapKitマップアプリフレームワークライブラリからMapViewを使用する方法Xcode8

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. 
    } 
に使用されるライブラリ

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; 
    } 
} 

コードで使用されていない、私のカスタムマップ

コードを表示

私はアプローチする方法や他の方法でそれを行うことを明確にする必要があります:)

答えて

1

あなたはdelegateとしてselfを追加し、func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRendererメソッドを実装し、あなたはあなたのライブラリに

をこれを行うことができ、今のアプリがクラッシュします。この

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

のような何かが欠けていると「0__abort_with_payload」 – Saneth

+1

が、その後追加語るされていますあなたのviewControllerのデリゲートと実装を試してみてください。セットアップは@Saneth –

+0

func mapview(_ mapview:MKMapView、レンダラーオーバーレイ:MKOverlay) - > MKOverlayRenderer {>}をテストするのは難しいです。このメソッドの問題を追加する方法は他にありますか? – Saneth

関連する問題