web-dev-qa-db-fra.com

Ajout rapide d'une seule broche à MKMapView?

J'ai une coordonnée GPS (latitude, longitude) et je veux rapidement placer une seule broche sur un MKMapView montrant cette position. Tout fonctionne très bien, mais comme je n'ai besoin que d'une seule broche sans légende, y a-t-il un moyen plus rapide de le faire ou ce que j'ai en dessous de ce qui doit être fait?

- (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: Je n'ai pas besoin de vérifier les vues d'annotation réutilisables car j'utilise uniquement la broche pour afficher une position dans une vue de détail (qui est détruite et recréée la prochaine fois qu'une vue de détail est demandée).

61
fuzzygoat

Au lieu d'utiliser le -mapView:viewForAnnotation: méthode, il suffit de mettre le code d'un MKPointAnnotation dans votre -viewDidLoad méthode. Cela n'animera pas la goutte, mais c'est très facile.

// 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];

Version Swift:

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

Vous pouvez définir le point et la région comme ceci:

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];
37
Hossam Ghareeb

Vous pouvez simplement l'ajouter comme:

    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)

Ça ressemble à:

6
Mr.Javed Multani

La méthode la plus simple et la plus simple pour déposer une épingle et afficher l'emplacement actuel dans la vue Carte consiste simplement à ajouter ce code dans votre méthode viewDidLoad. (En supposant que l'emplacement actuel de cet utilisateur est déjà récupéré par vous).

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];
6
Ankit Goyal

Version rapide de l'ajout de broches dans 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)
}

Version rapide de la mise au point d'une région ou d'une épingle

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

Pour en savoir plus, visitez " Charger MKMapView à l'aide de Swift ".

6
farhad rubel

Puisque vous voulez animer la goutte, vous devrez implémenter viewForAnnotation comme vous l'avez fait car cette propriété est NO par défaut.

Si vous n'avez pas besoin d'animer la suppression, vous pouvez éliminer complètement l'implémentation de la méthode viewForAnnotation et pour désactiver la légende, définissez title de l'annotation sur zéro ou vide lors de l'ajout de l'annotation.

Si vous avez besoin de l'animation de dépôt de broche et que vous affichez également l'emplacement de l'utilisateur (point bleu), vous devrez également vérifier MKUserLocation dans viewForAnnotation et retourner nil.

Sinon, vous pouvez supprimer toute la méthode viewForAnnotation et la punaise rouge par défaut apparaîtra sans animation, la légende s'affichera si title n'est pas vide et l'emplacement de l'utilisateur apparaîtra comme un point bleu.

4
user467105