我想从当前用户位置到注释点绘制折线,但它似乎没有绘制任何东西:
@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 }
此错误的原因是什么?
答案 0 :(得分:2)
如果它停在那里,请确保那里没有断点:
左边距中的深蓝色指示符表示那里有断点。如果您有断点,只需单击它以禁用它(将其更改为浅蓝色)或将其拖动以将其删除。
如果那不是问题(即它真的崩溃了),那么我们需要知道它是什么类型的崩溃,控制台中出现的等等。
如果没有崩溃,只是没有绘制路线,请确保您已指定地图视图的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中右侧)。
尽管如此,还有其他一些观察结果:
您的起始坐标为viewDidLoad
(即纬度为0,0的长度,即在太平洋中)。这不会导致崩溃,但是如果你检查CLLocationCoordinate2D()
对象,它的本地化描述会说:
方向不可用
您应该更正error
的{{1}}。
您应该对coordinate
使用异步方法保持警惕,因为在返回路由时,source
始终可能会被释放,并且会崩溃。使用unowned self
更安全。
因此:
self