tutorial manager example corelocation ios swift xcode uibutton mkannotation

manager - Abra la aplicación Apple Maps con las instrucciones de mi iOS App iOS 9 Swift 2.2



location manager swift tutorial (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 los mapas de Apple para obtener direcciones y navegar desde la ubicación actual del usuario a un seleccionado Pin Cuando presiono el CustomCalloutAccessory personalizado en mi aplicación

He configurado el botón pero no puedo hacer funcionar la función, por lo que, por favor, si alguien puede guiarme o ayudarme con Code, ¡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 función abrirá la aplicación Apple Maps y presentará las indicaciones de manejo desde la ubicación actual del usuario a un destino designado en una coordenada. 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 función 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) } } }


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