current mkmapview swift mkannotation mkannotationview

mkmapview - current - mapkit swift 4



Swift-Agregar MKAnnotationView To MKMapView (3)

1- la vista de su mapa debe delegarse en su controlador de vista 2- debe implementar

func mapView(aMapView: MKMapView!, viewForAnnotation annotation: CustomMapPinAnnotation!) -> MKAnnotationView!

esta función se llama desde cada anotación agregada a su Mapa

3- Subclasifique sus anotaciones para identificarlas en el método viewForAnnotation

4- en viewForAnnotation, agregar

if annotation.isKindOfClass(CustomMapPinAnnotation) { // change the image here var pinView = aMapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? YourSubclassedAnnotation pinView!.image = UIImage(contentsOfFile: "xyz") }

Estoy tratando de agregar MKAnnotationView a MKMapView pero no puedo hacerlo ... ¿Alguien me puede ayudar?

Aquí está mi código:

override func viewDidLoad() { super.viewDidLoad() locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.startUpdatingLocation() var latitude:CLLocationDegrees = locationManager.location.coordinate.latitude var longitude:CLLocationDegrees = locationManager.location.coordinate.longitude var homeLati: CLLocationDegrees = 40.01540192 var homeLong: CLLocationDegrees = 20.87901079 var latDelta:CLLocationDegrees = 0.01 var longDelta:CLLocationDegrees = 0.01 var theSpan:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta) var myHome:CLLocationCoordinate2D = CLLocationCoordinate2DMake(homeLati, homeLong) var myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) var theRegion:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, theSpan) self.theMapView.setRegion(theRegion, animated: true) self.theMapView.mapType = MKMapType.Hybrid self.theMapView.showsUserLocation = true ///Red Pin var myHomePin = MKPointAnnotation() myHomePin.coordinate = myHome myHomePin.title = "Home" myHomePin.subtitle = "Bogdan''s home" self.theMapView.addAnnotation(myHomePin) var anView:MKAnnotationView = MKAnnotationView() anView.annotation = myHomePin anView.image = UIImage(named:"xaxas") anView.canShowCallout = true anView.enabled = true }


Debe mostrar la anotación, luego debe agregar el método de anotación de presentación:

let annotation = MKPointAnnotation() mapVew.showAnnotations([annotation], animated: true)

annotation es una instancia de MKPointAnnotation .


viewForAnnotation implementar el método de delegado viewForAnnotation y devolver un MKAnnotationView desde allí.

Aquí hay un ejemplo:

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { if (annotation is MKUserLocation) { //if annotation is not an MKPointAnnotation (eg. MKUserLocation), //return nil so map draws default view for it (eg. blue dot)... return nil } let reuseId = "test" var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) if anView == nil { anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) anView.image = UIImage(named:"xaxas") anView.canShowCallout = true } else { //we are re-using a view, update its annotation reference... anView.annotation = annotation } return anView }

Recuerde que debe crear un MKAnnotationView simple cuando desee utilizar su propia imagen personalizada. El MKPinAnnotationView solo debe usarse para las anotaciones de pin estándar.

También tenga en cuenta que no debe intentar acceder a locationManager.location inmediatamente después de llamar a startUpdatingLocation . Puede que todavía no esté listo.

Utilice el método delegado didUpdateLocations .

También debe llamar a requestAlwaysAuthorization / requestWhenInUseAuthorization (consulte Servicios de ubicación que no funcionan en iOS 8 ).