Abra la aplicación Apple Maps con direcciones desde mi iOS App iOS 9 Swift 2.2

He estado buscando una gran cantidad de tutoriales \ Ayuda pero no parece encontrar ninguno, así que una vez más Ven aquí … Me gustaría abrir Apple Maps para get direcciones y navegar desde la location actual del usuario a una seleccionada Pin Cuando presiono el leftCalloutAccessory personalizado en mi aplicación

He configurado el button, pero no puedo hacer funcionar la function, así que, ¡si alguien me puede guiar o ayudarme con el código que será un salvavidas! Gracias

Aquí está mi código:

import UIKit import MapKit import CoreLocation class MapViewController: UIViewController,MKMapViewDelegate, CLLocationManagerDelegate,UISearchBarDelegate{ @IBOutlet weak var mapView: MKMapView! let locationManager = CLLocationManager() override func viewDidLoad() { super.viewDidLoad() //==========RegionLocation : ========= // Init the zoom level let coordinate:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 31.30, longitude: 34.45) let span = MKCoordinateSpanMake(125, 125) let region = MKCoordinateRegionMake(coordinate, span) self.mapView.setRegion(region, animated: true) //====================================\\ } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() //Dispose of resources that can be re created. } //Mark : Location func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let location = locations.last let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude) let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.06, longitudeDelta: 0.06)) self.mapView.setRegion(region, animated: true) self.locationManager.stopUpdatingLocation() } func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { print("Errors: " + error.localizedDescription) } func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { if annotation is MKUserLocation { return nil } let reuseID = "pin" var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseID) as? MKPinAnnotationView if(pinView == nil) { pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseID) pinView!.canShowCallout = true pinView!.animatesDrop = true pinView!.rightCalloutAccessoryView = UIButton(type: UIButtonType.DetailDisclosure) as UIButton let smallSquare = CGSize(width: 30, height: 30) let button = UIButton(frame: CGRect(origin: CGPointZero, size: smallSquare)) button.setBackgroundImage(UIImage(named: "Car"), forState: .Normal) pinView?.leftCalloutAccessoryView = button } else { pinView!.annotation = annotation } return pinView } func mapView(MapView: MKMapView, annotationView: MKAnnotationView, calloutAccessoryControlTapped Control: UIControl) { if Control == annotationView.leftCalloutAccessoryView { } } 

La siguiente function abrirá la aplicación Apple Maps y presentará las indicaciones de conducción desde la location actual del usuario hasta un destino con nombre en una coorderada. El nombre del destino se muestra en el campo Para: de la aplicación Mapas.

 func openMapsAppWithDirections(to coordinate: CLLocationCoordinate2D, destinationName name: String) { let options = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving] let placemark = MKPlacemark(coordinate: coordinate, addressDictionary: nil) let mapItem = MKMapItem(placemark: placemark) mapItem.name = name // Provide the name of the destination in the To: field mapItem.openInMapsWithLaunchOptions(options) } 

Puede llamar a esta function desde su código de la siguiente manera:

 func mapView(MapView: MKMapView, annotationView: MKAnnotationView, calloutAccessoryControlTapped Control: UIControl) { if Control == annotationView.leftCalloutAccessoryView { if let annotation = annotationView.annotation { // Unwrap the double-optional annotation.title property or // name the destination "Unknown" if the annotation has no title let destinationName = (annotation.title ?? nil) ?? "Unknown" openMapsAppWithDirections(to: annotation.coordinate, destinationName: destinationName) } } } 

Cree una extensión como esta:

 extension CLLocation { func drive() { let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDictionary) let launchOptions = [ MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving ] MKMapItem.openMaps(with: [MKMapItem.forCurrentLocation(), MKMapItem(placemark: placemark)], launchOptions: launchOptions) } }