2014-12-04 43 views
0

我有我的MKMapViewDelegate。此外,MapView.delegate = selfSwyline中的折線覆蓋

let c1 = myCLLocationCoodinate 
let c2 = myCLLocationCoodinate2 
var a = [c1, c2] 
var polyline = MKPolyline(coordinates: &a, count: a.count) 
self.MapView.addOverlay(polyline) 

與此委託方法:

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! { 

    if overlay is MKPolyline { 
     var polylineRenderer = MKPolylineRenderer(overlay: overlay) 
     polylineRenderer.strokeColor = UIColor.whiteColor() 
     polylineRenderer.lineWidth = 2 
     return polylineRenderer 
    } 
    return nil 
} 

我得到這個:EXC錯誤訪問線程8

self.MapView.addOverlay(polyline) 

回答

4

我覺得這裏的問題是與線:

var a = [c1, c2] 

在這裏,你直接創建陣列時不指定其類型。

參見參考下面的代碼來創建折線疊加和相關的委託方法:

let c1 = myCLLocationCoodinate 
let c2 = myCLLocationCoodinate2 

var points: [CLLocationCoordinate2D] 
points = [c1, c2] 

var geodesic = MKGeodesicPolyline(coordinates: &points[0], count: 2) 
mapView.add(geodesic) 

UIView.animate(withDuration: 1.5, animations: {() -> Void in 
    let span = MKCoordinateSpanMake(20, 20) 
    let region1 = MKCoordinateRegion(center: c1, span: span) 
    mapView.setRegion(region1, animated: true) 
}) 

的委託方法來呈現疊加:

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! { 

    if overlay is MKPolyline { 
     var polylineRenderer = MKPolylineRenderer(overlay: overlay) 
     polylineRenderer.strokeColor = UIColor.whiteColor() 
     polylineRenderer.lineWidth = 2 
     return polylineRenderer 
    } 
    return nil 
} 
+0

這解決了我的問題!非常感謝! – BX69 2014-12-06 21:59:07

1

看來你的地圖視圖已釋放。多段線結構是可以的。

通常情況下,變量以小寫字母開頭。你是否已經分類了地圖視圖並嘗試訪問該類?

+0

我不知道這是正確的。如果'MapView'被釋放,什麼都不會發生。 – 2014-12-04 23:33:07

+0

我在這裏聲明:@IBOutlet var MapView:MKMapView!是的,名稱應該更好。 :) – BX69 2014-12-04 23:43:29

+0

我放在代表方法的休息,它通過它沒有問題。 – BX69 2014-12-04 23:47:00

1

我花WAAAAAAAAYYYY太多時間在這,所以我想我會將解決方案添加到類似的問題。我正在使用帶有MKPolygon的addOverlay獲得EXC BAD ACCESS。事實證明,我一直在錯誤的線程上。與固定它:

var points = [MKMapPoint]() 
for var i = 0; i < area.coordinates.count; i+=2 { 
    let c = CLLocationCoordinate2DMake(area.coordinates[i], area.coordinates[i+1]) 
    points.append(MKMapPointForCoordinate(c)) 
} 
let polygon = MKPolygon(points: &points, count: points.count) 
dispatch_async(dispatch_get_main_queue(), { 
    self.mapView.addOverlay(polygon) 
}) 
+0

完全工作!非常感謝 ! – meucaa 2016-04-05 11:51:10

0
let firstlat : string = "12.9166" 
let firstlon : string = "77.6101" 

let secondlat : string = "12.9610" 
let secondLon : string = "77.6387" 

    let point1 = CLLocationCoordinate2DMake(Double(firstlat)!, Double(firstlon)!) 
    let point2 = CLLocationCoordinate2DMake(Double(secondlat as String)!, Double(secondLon)!) 

    let pickAnnotation : MKPointAnnotation = MKPointAnnotation() 
    pickAnnotation.coordinate = point1 
    pickAnnotation.title = "pick" 
    displayMapView.addAnnotation(pickAnnotation) 

    let dropAnnotation : MKPointAnnotation = MKPointAnnotation() 
    dropAnnotation.coordinate = point2 
    dropAnnotation.title = "drop" 
    displayMapView.addAnnotation(dropAnnotation) 
    displayMapView.showAnnotations(displayMapView.annotations, animated: true) 

    var points: [CLLocationCoordinate2D] 
    points = [point1, point2] 
    routeLine = MKPolyline(coordinates: &points[0] , count: 2) 
    displayMapView.add(routeLine)