62 votes

MKMapView: au lieu de Pin d'annotation, une vue personnalisée

Je veux afficher une image dans mon MKMapView au lieu d'une petite épingle . Quelqu'un peut-il s'il vous plaît mettre un code utile ici, ou dire la façon de le faire?

Merci!

MODIFIER

 -(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = nil; 
if(annotation != mapView.userLocation) 
{
    static NSString *defaultPinID = @"com.invasivecode.pin";
    pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
    if ( pinView == nil ) pinView = [[MKPinAnnotationView alloc]
                                      initWithAnnotation:annotation reuseIdentifier:defaultPinID];

    pinView.pinColor = MKPinAnnotationColorGreen; 
    pinView.canShowCallout = YES;
    pinView.animatesDrop = YES;
    pinView.image = [UIImage imageNamed:@"pinks.jpg"];    //as suggested by Squatch
} 
else {
    [mapView.userLocation setTitle:@"I am here"];
}
return pinView;
}
 

Je m'attends à ce que mon image pinks.jpg apparaisse sur la carte, épinglant l'emplacement au lieu de l'affichage par défaut des épingles (en forme d'épingle ). Mais je reçois toujours l'image par défaut de la broche.

118voto

Anna Points 44332

Lorsque vous voulez utiliser votre propre image pour une vue d'annotation, vous devez créer un MKAnnotationView au lieu d'un MKPinAnnotationView.

MKPinAnnotationView est une sous-classe de MKAnnotationView , donc il a un image de la propriété, mais il est généralement l'emporte et qui attire une broche de l'image (c'est à quoi il sert).

Donc changer le code pour:

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation 
{
    MKAnnotationView *pinView = nil; 
    if(annotation != mapView.userLocation) 
    {
        static NSString *defaultPinID = @"com.invasivecode.pin";
        pinView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinView == nil ) 
            pinView = [[MKAnnotationView alloc]
                                         initWithAnnotation:annotation reuseIdentifier:defaultPinID];

        //pinView.pinColor = MKPinAnnotationColorGreen; 
        pinView.canShowCallout = YES;
        //pinView.animatesDrop = YES;
        pinView.image = [UIImage imageNamed:@"pinks.jpg"];    //as suggested by Squatch
    } 
    else {
        [mapView.userLocation setTitle:@"I am here"];
    }
    return pinView;
}


Notez que animatesDrop est également commenté depuis que la propriété n'existe que dans MKPinAnnotationView.

Si vous voulez que votre image annotations à la baisse, vous aurez à faire de l'animation vous-même. Vous pouvez effectuer une recherche de Dépassement de Pile pour "animatesdrop mkannotationview" et vous en trouverez plusieurs réponses. Voici les deux premiers:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X