使用mapkit Swift 3绘制折线

时间:2017-05-27 18:21:24

标签: swift xcode mapkit draw polyline

我想从当前用户位置到注释点绘制折线,但它似乎没有绘制任何东西:

@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 个答案:

答案 0 :(得分:2)

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

enter image description here

左边距中的深蓝色指示符表示那里有断点。如果您有断点,只需单击它以禁用它(将其更改为浅蓝色)或将其拖动以将其删除。

如果那不是问题(即它真的崩溃了),那么我们需要知道它是什么类型的崩溃,控制台中出现的等等。

如果没有崩溃,只是没有绘制路线,请确保您已指定地图视图的if (ListBoxes[s] == sender && ListBoxes[s].Focused == true) { if(s == 1 && ListBoxes[s].SelectedIndex > -1) //assuming 1 is listbox2 { ListBoxes[0].SelectedIndex = -1; // Deselect ListBox1 } string msg = "sender is ListBox " + s.ToString() + "\nFocus is" + ListBoxes[s].Focused.ToString(); } (在delegate或在IB中右侧)。

尽管如此,还有其他一些观察结果:

  1. 您的起始坐标为viewDidLoad(即纬度为0,0的长度,即在太平洋中)。这不会导致崩溃,但是如果你检查CLLocationCoordinate2D()对象,它的本地化描述会说:

      

    方向不可用

    您应该更正error的{​​{1}}。

  2. 您应该对coordinate使用异步方法保持警惕,因为在返回路由时,source始终可能会被释放,并且会崩溃。使用unowned self更安全。

  3. 因此:

    self