打开方向功能不以编程方式打开苹果地图

Posted

技术标签:

【中文标题】打开方向功能不以编程方式打开苹果地图【英文标题】:Open directions func not opening apple maps programmatically 【发布时间】:2017-02-26 20:31:08 【问题描述】:

我现在正在做一个项目,但被困在最后一部分。我设计了一个带有 20 个自定义注释的应用程序,供我们的婚礼宾客使用以查找附近的餐馆、酒吧、咖啡店等。有各种自定义注释来识别每个位置是什么。它还询问用户当前位置,以便他们可以找到附近的东西。我希望能够点击注释,让我们的朋友和家人能够从他们当前的位置获取到注释的路线。似乎最好的方法是在我的自定义点注释中使用我的纬度和经度坐标打开苹果地图应用程序。我的代码似乎根本没有打开该地图应用程序。我添加了一个正确的呼叫,我已经查看了所有关于这个问题的新旧问题,但找不到解决方案。任何建议将不胜感激,因为这是我的第一个真正的 swift 应用程序。以下是我当前的开放方向功能。提前感谢您的任何帮助或见解。

    func openDirections(_ address :String?) 

    self.geocoder.geocodeAddressString(address!, completionHandler:  (placemarks :[CLPlacemark]?, error :NSError?) -> Void in

        let placemark = placemarks![0] as CLPlacemark

        let destinationPlacemark = MKPlacemark(coordinate: placemark.location!.coordinate, addressDictionary: placemark.addressDictionary as? [String:NSObject])

        let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: placemark.location!.coordinate, addressDictionary:nil))
        mapItem.openInMaps(launchOptions: [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving])

        let startingMapItem = MKMapItem.forCurrentLocation()
        let destinationMapItem = MKMapItem(placemark: destinationPlacemark)

        let directionsRequest = MKDirectionsRequest()
        directionsRequest.transportType = .automobile
        directionsRequest.source = startingMapItem
        directionsRequest.destination = destinationMapItem

        let directions = MKDirections(request: directionsRequest)

        directions.calculate(completionHandler:  (response :MKDirectionsResponse?, error :NSError?) -> Void in

            let route = response!.routes[0] as MKRoute

            if route.steps.count > 0 

                for step in route.steps 

                    print(step.instructions)

                
            

            self.mapView!.add((route.polyline), level: MKOverlayLevel.aboveRoads)
             as! MKDirectionsHandler)
         as! CLGeocodeCompletionHandler)

【问题讨论】:

为什么要打开地图应用?你有MKMapView 对吗?您可以使用它并进行自定义注释。您可以使用CoreLocation 框架来获取和更新当前用户的位置。我想我不明白您为什么要在不必要的时候强迫用户从您的应用程序转到 Apple 地图应用程序。 @Pierce 我也会对这个选项感到满意,但是在搜索了关于 SO 的多个教程/问题之后,我也很难弄清楚这一点。我似乎无法在具有多个注释的应用程序中找到一个好的解决方案。任何有关解决该问题的最佳方法的建议将不胜感激。 你知道有很多东西要学,而且比我在评论或回答中告诉你的要多得多。看看这个免费教程。它应该涵盖您可能需要的所有内容raywenderlich.com/136165/core-location-geofencing-tutorial 【参考方案1】:

继续删除您编写的所有内容,并研究如何编写一个新的、更好的、更简洁的函数。这对我有用,我希望它对其他人有所帮助。

    func mapView(_ mapView: MKMapView, annotationView view:MKAnnotationView, calloutAccessoryControlTapped control: UIControl) 

    let placemark = MKPlacemark(coordinate: view.annotation!.coordinate, addressDictionary: nil)
    let mapItem = MKMapItem(placemark: placemark)
    let launchOptions = [MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeTransit]
    self.title = title
    mapItem.name = title
    mapItem.openInMaps(launchOptions: launchOptions)

【讨论】:

以上是关于打开方向功能不以编程方式打开苹果地图的主要内容,如果未能解决你的问题,请参考以下文章

用于在 Apple 地图中打开方向的 jQuery Mobile 按钮

在 ios 8 及更高版本上打开苹果地图不起作用

苹果地图显示默认区域

尝试在我的应用程序中打开苹果地图应用程序时发送到实例的无法识别的选择器

苹果地图后退导航

Phonegap 苹果地图:从当前位置导航