Swift - Custom MKAnnotationView, set-label-Titel
Ich versuche, passen Sie die MKAnnotationView für meine mapView Legende Blasen. Ich bin gut mit der Einstellung der annotation Titel, wenn die annotation erstellt wurde, und auch die Anpassung der MKAnnotationView zum hinzufügen von Etiketten oder Bilder.e.t.c (in der viewForAnnotation
Delegierte), aber wie ändere ich das label erstellt, in der viewForAnnotation
delegieren, so dass der Titel anders ist es für jeden pin?
Die andere Frage, die ich habe ist, dass wenn ich nicht fügen Sie einen Titel oder Untertitel zu der Anmerkung, wenn es erstellt wird, in der viewDidLoad-Methode, aber ich immer noch versuchen, und erstellen Sie eine durch das verlassen self.map.addAnnotation(annotation)
, wenn ich die app ausführen und Tippen Sie die pin nicht callout-Sprechblase wird angezeigt.
Am Ende hätte ich gerne ganz individuelle callout-Blasen, mit individuellen labels auf Sie für jeden pin. Also, was ich wirklich ned wissen, wie Sie auf die viewForAnnotation delegieren, wenn die annotation erstellt wird, um Eigenschaften zu ändern, es für jeden pin.
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
}
- Alternativ, wenn es einen einfachen Weg, um die schriftart zu ändern der annotation Titel dann tun würde, scheint ziemlich lächerlich, dass du mir nicht!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen Sie Ihre benutzerdefinierten annotation anzeigen
Es gibt keine öffentliche API ermöglicht Ihnen den Zugriff auf die label in der pop-up direkt. Was Sie tun müssen, ist eine Unterklasse von
MKPinAnnotationView
und tun, was Anpassung, die Sie wollen, ist es. Als ein Beispiel,Sonstige Erläuterungen
Verwenden Sie diese benutzerdefinierte Ansicht in der Kartenansicht:
Da die
title
Eigenschaft der Anmerkung ist nicht festgelegt, Sie müssen rufen Sie die map-view-FunktionselectAnnotation
selbst. Fügen Sie den folgenden, um dieCustomAnnotationView
Klasse:Wenn Sie wollen, um mehr als eine Markierung auf der Karte:
In der Regel ziehen die annotation einfach während der Initialisierung. In setSelected einfach nur wieder falsch (im Sinne von "show-alle Anmerkungen, die die ganze Zeit").
Legen Sie die Zeichenfolge (oder anderen Werten - sagen die Farbe von dem panel) für jede annotation in mapView#viewFor. Es ist wie das füllen einer Zelle in einem UITableView.
Schließlich beachten Sie, dass etwas verwirrend, wenn Sie sehr einfach ändern Sie die Klasse von CustomAnnotationView von MKPinAnnotationView zu MKAnnotationView, funktioniert alles das gleiche, aber es ersetzt "die pin" und nicht nur die Beschriftung.
MKAnnotationView
stattMKPinAnnotationView
. DieMKPinAnnotationView
zeigen die pin (mit dem roten Kreis oben) standardmäßig.