从地图上的注释中获取路线

时间:2017-12-07 22:25:09

标签: ios swift mapkit cloudkit mkannotation

我正在尝试从我的地图上找到的任何注释中获取路线。我使用CloudKit作为数据库来存储我的所有用户信息。注释使用location中的CloudKit索引来映射它们在地图上的位置。每次运行我的代码时,注释都会返回为nil,如何让代码从注释中识别位置并从Apple地图返回方向?

@IBAction func getDirections(_ sender: Any) {

    let view = MKPointAnnotation().coordinate


    print("Annotation: \(String(describing: view ))")

    let currentLocMapItem = MKMapItem.forCurrentLocation()

    let selectedPlacemark = MKPlacemark(coordinate: view, addressDictionary: nil)
    let selectedMapItem = MKMapItem(placemark: selectedPlacemark)

    let mapItems = [selectedMapItem, currentLocMapItem]

    let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]

    MKMapItem.openMaps(with: mapItems, launchOptions:launchOptions)



}

1 个答案:

答案 0 :(得分:1)

有两种选择:

  1. 您可以使用MKDirections直接在应用中获取路线,而无需使用地图应用。

  2. 您也可以将其传递给地图应用(如上图所示),以便用户可以享受完整的实时导航(请参阅流量等)。

  3. 但是,您不要使用“在地图中打开”API来返回应用内的路线。请使用MKDirections

    在您的代码段中,您正在执行以下操作:

    let view = MKAnnotationView()
    

    这会创建一个空白的注释视图(没有注释),所以很明显,如果你试图获取它的注释,它就没有注释。你可能想要

    • 保存您添加到地图视图中的原始注释并使用它;
    • 回复其中一个MKMapViewDelegate方法,并在地图视图中使用annotation作为该注释视图;或
    • 返回原始创建注释的原始数据源,并从中创建新注释(而不是注释视图)。

    但是不要尝试创建一个新的空白注释视图,并尝试为它检索注释视图,因为它没有一个。