Swift – Adicionar MKAnnotationView ao MKMapView

Estou tentando adicionar o MKAnnotationView ao MKMapView mas não posso fazê-lo… Alguém pode me ajudar?

Aqui está o meu 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 } 

Você precisa implementar o método delegado viewForAnnotation e retornar um MKAnnotationView de lá.

Aqui está um exemplo:

 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 } 

Lembre-se de que você precisa criar um MKAnnotationView simples quando quiser usar sua própria imagem personalizada. O MKPinAnnotationView só deve ser usado para as annotations de pino padrão.

Observe também que você não deve tentar acessar locationManager.location imediatamente após chamar startUpdatingLocation . Pode não estar pronto ainda.

Use o método delegado didUpdateLocations .

Você também precisa chamar requestAlwaysAuthorization / requestWhenInUseAuthorization (consulte Serviços de Localização não funcionando no iOS 8 ).

1- a sua vista de mapa deve delegar-se ao seu controlador de visualização 2- você deve implementar

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

essa function é chamada de todas as annotations adicionadas ao seu mapa

3- subclass suas annotations para identificá-las no método viewForAnnotation

4- no viewForAnnotation, adicione

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

Você tem que mostrar annotations, então você tem que adicionar o método de anotação:

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

annotation é uma instância do MKPointAnnotation .

    Intereting Posts