2017-05-27 18 views
3

我想提请当前用户位置的折线来注释一点,但它似乎并没有画任何东西:绘制折线与mapkit斯威夫特3

@IBAction func myButtonGo(_ sender: Any) { 
    showRouteOnMap() 
} 

func showRouteOnMap() { 
    let request = MKDirectionsRequest() 

    request.source = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D.init(), addressDictionary: nil)) 
    request.destination = MKMapItem(placemark: MKPlacemark(coordinate: (annotationCoordinatePin?.coordinate)!, addressDictionary: nil)) 
    request.requestsAlternateRoutes = true 
    request.transportType = .automobile 

    let directions = MKDirections(request: request) 

    directions.calculate { [unowned self] response, error in guard let unwrappedResponse = response else { return } 

     if (unwrappedResponse.routes.count > 0) { 
      self.mapView.add(unwrappedResponse.routes[0].polyline) 
      self.mapView.setVisibleMapRect(unwrappedResponse.routes[0].polyline.boundingMapRect, animated: true) 
     } 
    } 
} 

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
    let renderer = MKPolylineRenderer(polyline: overlay as! MKPolyline) 
    renderer.strokeColor = UIColor.black 
    return renderer 
} 

我试图在调试模式下,它运行在线处断点处停止:

directions.calculate { [unowned self] response, error in guard let unwrappedResponse = response else { return } 

这个错误的原因是什么?

回答

1

如果它停在那里,请确保你没有一个断点:

enter image description here

在左边距深蓝色指标表明有一个断点。如果你有一个断点,只需点击它就可以禁用它(将其改为淡蓝色)或将其拖出以将其删除。

如果不是(即它的真正崩溃),那么我们需要知道如果它不崩溃什么样的崩溃是什么在控制台中露面等

的,但根本就没有绘制问题路线,确保你已经指定了地图视图的delegate(在viewDidLoad或右边的IB)。


话虽如此,一对夫妇的其他意见,但:

  1. 你的起点坐标是CLLocationCoordinate2D()(即lat和长0,0,即在太平洋)。这不会导致崩溃,但如果检查error对象,它的本地化描述会说:

    路线不可用

    你应该纠正coordinatesource

  2. 你应该警惕unowned self与异步方法,因为总是有可能self可以释放到指令返回时,它会崩溃。使用[weak self]更安全。

因此:

let request = MKDirectionsRequest() 
request.source = MKMapItem(placemark: MKPlacemark(coordinate: sourceCoordinate)) 
request.destination = MKMapItem(placemark: MKPlacemark(coordinate: destinationCoordinate)) 
request.requestsAlternateRoutes = true 
request.transportType = .automobile 

let directions = MKDirections(request: request) 
directions.calculate { [weak self] response, error in 
    guard let response = response, error == nil, let route = response.routes.first else { 
     print(error?.localizedDescription ?? "Unknown error") 
     return 
    } 

    self?.mapView.add(route.polyline) 
}