ios - 打开方向功能不以编程方式打开苹果 map

标签 ios swift mapkit

我现在正在做一个项目,卡在了最后一部分。我设计了一个带有 20 个自定义注释的应用程序,我们的婚礼宾客可以使用它来查找附近的餐馆、酒吧、咖啡店等。有各种自定义注释来识别每个位置。它还会询问用户当前位置,以便他们可以找到附近的东西。我希望能够单击注释,让我们的 friend 和家人能够获得从他们当前位置到注释的方向。似乎最好的方法是在我的自定义点注释中使用我的经纬度坐标打开苹果 map 应用程序。我的代码似乎根本没有打开那个 map 应用程序。我添加了一个正确的调用,我已经查看了所有关于这个问题的新旧问题,但找不到解决方案。任何建议将不胜感激,因为这是我的第一个真正的 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)
}

最佳答案

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

    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)
}

关于ios - 打开方向功能不以编程方式打开苹果 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473881/

相关文章:

ios - UIBarButtonItem 图像的颜色/不透明度

ios - 有没有办法在不刷新单元格的情况下显示单元格中的对象?

ios - 自定义标注 View 不想出现

ios - iOS13 上 UIControlSegment 背景色不再透明

ios - 错误 无法使用 'Dictionary<NSObject, AnyObject>' 类型的索引为 'String' 类型的值添加下标

ios - 更新 TableView 导致崩溃

ios - 在双组件 pickerView 中查找两个变量

swift - 单元格的结构在 UIView.transition 之后被破坏

ios - 无法使用 iOS mapkit 为中国 poi 计算 ETA 和方向

ios - 如果我直接实例化 VC,setRegion() 不起作用,但如果我通过 segue Swift 4 访问 VC,setRegion() 则不起作用