我现在正在开展一个项目,并且最后一部分工作了。我设计了一个带有20个自定义注释的应用程序,供我们的婚礼客人用来查找附近的餐馆,酒吧,咖啡店等。有各种自定义注释可以识别每个位置。它还要求用户当前位置,以便他们可以找到附近的东西。我希望能够点击注释,让我们的朋友和家人能够获得从当前位置到注释的路线。看起来最好的方法是在我的自定义点注释中打开我的纬度和经度坐标的苹果地图应用程序。我的代码似乎根本没有打开地图应用程序。我已经添加了一个正确的呼叫,我已经查看了所有新问题的新旧问题并且无法找到解决方案。任何建议将非常感谢,因为这是我的第一个真正的快速应用程序。以下是我目前的开放路线功能。提前感谢您的任何帮助或见解。
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)
}
答案 0 :(得分: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)
}