2012-03-27 2 views
51

Ich habe eine GPS-Koordinate (Breite, Länge) und ich möchte schnell einen einzelnen Pin auf eine MKMapView platzieren, die diese Position zeigt. Alles funktioniert gut, aber da ich nur einen einzigen Pin ohne Callout benötige, gibt es einen schnelleren Weg, dies zu tun, oder was habe ich unten, was zu tun ist?Schnell einen einzelnen Pin zu MKMapView hinzufügen?

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 
    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"DETAILPIN_ID"]; 
    [pinView setAnimatesDrop:YES]; 
    [pinView setCanShowCallout:NO]; 
    return pinView; 
} 

NB: Ich brauche nicht für wiederverwendbare Beschriftungsansichten zu überprüfen, da ich nur den Stift mit bin eine Position in einer Detailansicht zeigen (die zerstört und neu erstellt das nächste Mal eine Detailansicht wird gebeten) .

Antwort

4

Da Sie den Drop animieren möchten, müssen Sie viewForAnnotation implementieren, wie Sie getan haben, da diese Eigenschaft standardmäßig NO ist.

Wenn Sie die Tropfen nicht animieren müssen, können Sie die viewForAnnotation Methode Implementierung vollständig beseitigen könnte und die Legende zu deaktivieren, setzen Sie die Anmerkung des title auf Null oder leer, wenn stattdessen die Anmerkung hinzugefügt wird.

Wenn Sie die Stecknadel fallen Animation tun müssen, und Sie sind auch die Position des Benutzers (blauer Punkt) zeigt, werden Sie auch für MKUserLocation in viewForAnnotation überprüfen müssen und nil zurückzukehren.

Andernfalls können Sie die gesamte Methode viewForAnnotation entfernen und der rote Standardstift wird ohne Animation angezeigt. Das Callout wird angezeigt, wenn title nicht leer ist und der Benutzerstandort als blauer Punkt angezeigt wird.

+0

einen guten Punkt Das ist, habe ich nicht versuchen, viewForAnnotation Umsetzung, aber ich wusste nicht, dass meine beiden Titel und Untertitel waren zeigt auf NSStrings.Ich bin nicht allzu sehr an den Pin-Drop gebunden, aber ich denke, jetzt ist es in einem wird es so lassen wie es ist. Vielen Dank für Ihre Antwort, sehr hilfreich und sicherlich etwas, das ich in Zukunft nutzen werde. – fuzzygoat

111

Anstatt die -mapView:viewForAnnotation: Methode zu verwenden, geben Sie einfach den Code für MKPointAnnotation in Ihre -viewDidLoad Methode ein. Es wird den Tropfen nicht animieren, aber es ist sehr einfach.

// Place a single pin 
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
[annotation setCoordinate:centerCoordinate]; 
[annotation setTitle:@"Title"]; //You can set the subtitle too 
[self.mapView addAnnotation:annotation]; 

Swift Version:

let annotation = MKPointAnnotation() 
let centerCoordinate = CLLocationCoordinate2D(latitude: 41, longitude:29) 
annotation.coordinate = centerCoordinate 
annotation.title = "Title" 
mapView.addAnnotation(annotation) 
+2

ist es möglich, den Tropfen einer MKPointAnnotation zu animieren? – VeganKid

+0

Sie können den Tropfen nicht einfach animieren. Wenn Sie die Animation möchten, verwenden Sie die 'mapView: viewForAnnotation:' Delegate-Methode. –

6

Die einfachste und einfachste Methode, einen Stift fallen zu lassen und in der Karte Aktuellen Standorts Anzeige ist einfach diesen Code in Ihrer viewDidLoad Methode hinzufügen. (Angenommen, der aktuelle Standort des Benutzers wird bereits von Ihnen abgerufen).

NSString *display_coordinates=[NSString stringWithFormat:@"Latitude is %f and Longitude is %f",coordinate.longitude,coordinate.latitude]; 

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
[annotation setCoordinate:coordinate]; 
[annotation setTitle:@"Click Labs"];    
[annotation setSubtitle:display_coordinates]; 
[mapView addAnnotation:annotation]; 
32

Sie können den Punkt eingestellt und auch die Region wie folgt aus:

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(lat, lon); 

MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1); 
MKCoordinateRegion region = {coord, span}; 

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
[annotation setCoordinate:coord]; 

[self.staticMapView setRegion:region]; 
[self.staticMapView addAnnotation:annotation]; 
+0

thanks.its funktioniert –

+0

Funktioniert gut ..! Vielen Dank.. – Gati

3

Swift-Version pin in MKMapView:

func addPin() { 
    let annotation = MKPointAnnotation() 
    let centerCoordinate = CLLocationCoordinate2D(latitude: 20.836864, longitude:-156.874269) 
    annotation.coordinate = centerCoordinate 
    annotation.title = "Lanai, Hawaii" 
    mapView.addAnnotation(annotation) 
} 

Swift-Version eine Region oder Stift Fokussierung

func focusMapView() { 
    let mapCenter = CLLocationCoordinate2DMake(20.836864, -156.874269) 
    let span = MKCoordinateSpanMake(0.1, 0.1) 
    let region = MKCoordinateRegionMake(mapCenter, span) 
    mapView.region = region 
} 

Um mehr Details zu erfahren s besuchen Sie "Load MKMapView using Swift".

0

einfach können Sie fügen Sie es mögen:

mapView.mapType = MKMapType.standard 

    let location = CLLocationCoordinate2D(latitude: 23.0225,longitude: 72.5714) 

    let span = MKCoordinateSpanMake(0.05, 0.05) 
    let region = MKCoordinateRegion(center: location, span: span) 
    mapView.setRegion(region, animated: true) 

    let annotation = MKPointAnnotation() 
    annotation.coordinate = location 
    annotation.title = "Javed Multani" 
    annotation.subtitle = "Surat, India" 
    mapView.addAnnotation(annotation) 

Es ist wie folgt aussehen: enter image description here