11

Swift アプリでポリラインを描画したい。

スウィフトコード

class MapViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet var theMapView: MKMapView

    override func viewDidLoad() {
        super.viewDidLoad()
        setMapView()
    }

    func setMapView() {
        //theMapView.zoomEnabled = false
        //theMapView.scrollEnabled = false 
        theMapView.rotateEnabled = false  

        // 
        var lat: CLLocationDegrees = 37.586601
        var lng: CLLocationDegrees = 127.009381

        // 
        var latDelta: CLLocationDegrees = 0.008
        var lngDelta: CLLocationDegrees = 0.008

        var theSpan: MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lngDelta)

        var initLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(lat, lng)
        var theRegion: MKCoordinateRegion = MKCoordinateRegionMake(initLocation, theSpan)
        self.theMapView.setRegion(theRegion, animated: true)

        var locations = [CLLocation(latitude: 37.582691, longitude: 127.011186), CLLocation(latitude: 37.586112,longitude: 127.011047), CLLocation(latitude: 37.588212, longitude: 127.010438)]
        var coordinates = locations.map({(location: CLLocation) -> CLLocationCoordinate2D in return location.coordinate})
        var polyline = MKPolyline(coordinates: &coordinates, count: locations.count)

        var myPolylineView : MKPolylineView
        /* error */
        myPolylineView.polyline = polyline // #1
        myPolylineView.strokeColor = UIColor.blueColor() // #2
        myPolylineView.lineWidth = 5; // #3
        self.theMapView.addOverlay(myPolylineView) // #4
        /* ----- */    
    }
}

エラー:

// #1 <br>
Cannot assign to 'polyline' in 'myPolylineView' <br>
// #2 <br>
'strokeColor' is unvailable: APIs deprecated as iOS 7 and earlier are unavailable in Swift <br>
// #3 <br>
'lineWidth' is unvailable: APIs deprecated as iOS 7 and earlier are unavailable in Swift <br>
// #4 <br>
Missing argument for parameter 'level' in call <br>

これに対する解決策が見つかりません。

4

1 に答える 1

21

まず、 の代わりにMKPolylineView、 を作成する必要がありますMKPolylineRenderer

MKPolylineViewiOS 7 以降は廃止されており、必要に応じて Objective-C で引き続き使用できますが、Swift ではサポートされていません。

次にMKPolylineRenderer、デリゲート メソッドで を作成して返す必要がありますrendererForOverlay( に渡さないでくださいaddOverlay)。

addOverlayメソッドでは、オブジェクトを渡しますMKPolyline(MKPolylineViewまたはではありませんMKPolylineRenderer)。

(渡すオブジェクトと返すオブジェクトの違いの説明については、MKMapView へのオーバーレイとして MKOverlayPathRenderer を追加すると例外が発生するを参照してください。)addOverlayrendererForOverlay


そのため、このsetMapViewメソッドでは、行を作成して設定し、次myPolylineViewのように変更するaddOverlay行を削除します。

self.theMapView.addOverlay(polyline)

rendererForOverlay次に、メソッドを実装します。

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
    if overlay is MKPolyline {
        var polylineRenderer = MKPolylineRenderer(overlay: overlay)
        polylineRenderer.strokeColor = UIColor.blueColor()
        polylineRenderer.lineWidth = 5
        return polylineRenderer
    }

    return nil
}

マップ ビューdelegateが設定されていることを確認してください。そうしないと、デリゲート メソッドが呼び出されず、オーバーレイが表示されません。theMapViewが IBOutlet の場合、delegateアウトレットを接続するか、コードで設定します (例viewDidLoad: super を呼び出した後):

self.theMapView.delegate = self
于 2014-07-17T18:44:59.867 に答える