web-dev-qa-db-fra.com

Comment créer un MKAnnotationView personnalisé et un titre et sous-titre d'annotation personnalisé

enter image description here

J'ai besoin de créer une vue d'annotation ci-dessus sur MKMapView. Je suis capable de créer la vue d'annotation personnalisée mais sur le robinet de l'annotation, la vue doit être ouverte avec l'image avec ce gros texte, je ne peux pas créer celle-là. Veuillez me fournir des liens ou la façon de faire cette tâche.

18
Abhishek

Pour créer une vue d'annotation personnalisée (votre remplacement pour la broche standard), vous pouvez simplement définir la propriété image de la MKAnnotationView in la méthode viewForAnnotation :

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
    {
        return nil;
    }
    else if ([annotation isKindOfClass:[YourAnnotationClassHere class]]) // use whatever annotation class you used when creating the annotation
    {
        static NSString * const identifier = @"MyCustomAnnotation";

        MKAnnotationView* annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

        if (annotationView)
        {
            annotationView.annotation = annotation;
        }
        else
        {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                          reuseIdentifier:identifier];
        }

        annotationView.canShowCallout = NO; // set to YES if using customized rendition of standard callout; set to NO if creating your own callout from scratch
        annotationView.image = [UIImage imageNamed:@"your-image-here.png"];

        return annotationView;
    }
    return nil;
}

Vous pouvez également ajuster la propriété centerOffset pour que la broche s'aligne exactement comme vous le souhaitez.

Concernant la personnalisation de la légende, l'approche la plus simple consiste à spécifier leftCalloutAccessoryView, rightCalloutAccessoryView et/ou detailCalloutAccessoryView. Cela vous donne un degré de contrôle surprenant, en ajoutant toutes sortes d'images, d'étiquettes, etc.

Si vous souhaitez effectuer une refonte radicale de la légende, vous pouvez avoir viewForAnnotation définir canShowCallout sur NO, puis répondre à setSelected dans votre vue d'annotation personnalisée pour afficher votre propre légende. Dans Swift, voir Personnaliser la vue des légendes MKAnnotation? pour quelques options de personnalisation des légendes.

37
Rob