Swift - Custom MKAnnotationView, définir l'étiquette de titre
Je suis en train de personnaliser le MKAnnotationView pour mon mapView légende des bulles. Je suis fine avec réglage de l'annotation titre lors de l'annotation est créée, et aussi la personnalisation de l'MKAnnotationView pour ajouter des étiquettes ou des images d'e.t.c (dans le viewForAnnotation
délégué), mais comment puis-je changer l'étiquette de créé au viewForAnnotation
délégué, de sorte que le titre de c'est différent pour chacune des broches?
L'autre problème que j'ai est que si je ne suis pas d'ajouter un titre ou sous-titre à l'annotation lorsqu'il est créé dans la méthode viewDidLoad, mais j'essaie toujours d'en créer un en laissant self.map.addAnnotation(annotation)
, quand je lance l'application et appuyez sur la broche pas de légende de la bulle est affichée.
À la fin, j'aimerais avoir totalement personnalisé légende des bulles, avec des étiquettes individuelles pour chaque broche. Donc ce que j'ai vraiment nie savoir, c'est comment accéder à la viewForAnnotation délégué lorsque l'annotation est créée pour modifier les propriétés pour chaque broche.
override func viewDidLoad() {
super.viewDidLoad()
var countries: [String] = ["Germany","Germany","Poland","Denmark"]
var practiceRoute: [CLLocationCoordinate2D] = [CLLocationCoordinate2DMake(50, 10),CLLocationCoordinate2DMake(52, 9),CLLocationCoordinate2DMake(53, 20),CLLocationCoordinate2DMake(56, 14)]
for vari=0; i<practiceRoute.count; i++ {
var annotation = MKPointAnnotation
annotation.title = countries[i]
annotation.coordinate = practiceRoute[i]
self.map.addAnnotation(annotation)
}
}
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
let base = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
base.backgroundColor = UIColor.lightGrayColor()
let label1 = UILabel(frame: CGRect(x: 30, y: 10, width: 60, height: 15))
label1.textColor = UIColor.blackColor()
label1.text = "12 photos"
base.addSubview(label1)
pinView!.leftCalloutAccessoryView = base
pinView!.pinColor = .Red
}
return pinView
}
OriginalL'auteur TimWhiting | 2015-01-21
Vous devez vous connecter pour publier un commentaire.
Faire de votre personnalisé de la vue d'annotation
Public n'est pas API vous permettant d'accéder à l'étiquette dans le menu directement. Ce que vous devez faire est de faire une sous-classe de
MKPinAnnotationView
et de faire ce que la personnalisation que vous souhaitez. Comme un exemple,Autres Remarques
Utiliser cette vue personnalisée dans la vue de la carte:
Depuis le
title
propriété de l'annotation n'est pas défini, vous aurez pour appeler l'affichage de la carte de fonctionselectAnnotation
vous-même. Ajouter le texte suivant à laCustomAnnotationView
classe:Si vous voulez avoir plus d'un marqueur sur la carte:
Habituellement juste attirer l'annotation simplement lors de l'initialisation. Dans setSelected il suffit de retourner false (qui signifie "afficher tous les annotations de tous les temps").
Vous définissez la chaîne (ou d'autres valeurs - dire la couleur du panneau) pour chaque annotation dans mapView#viewFor. C'est comme le remplissage d'une cellule dans une UITableView.
Enfin, notez qu'un peu prêter à confusion, si vous pouvez très simplement modifier la classe de CustomAnnotationView de MKPinAnnotationView à MKAnnotationView, tout fonctionne de la même, mais elle remplace "toutes les broches" plutôt que de simplement l'annotation.
REMARQUE: Si vous voulez un totalement personnalisé, d'annotation, vous aurez besoin à la sous-classe
MKAnnotationView
au lieu deMKPinAnnotationView
. LeMKPinAnnotationView
montrera la broche (avec le cercle rouge sur le dessus) par défaut.OriginalL'auteur Yuchen Zhong