2010-05-21 8 views
14

Puis-je créer un MKAnnotation ou est-il en lecture seule? J'ai des coordonnées, mais je ne trouve pas facile de créer manuellement un MKAnnotation en utilisant setCoordinate.iPhone: Créer MKAnnotation

Des idées?

Répondre

40

MKAnnotation est un protocole. Vous devez donc écrire votre propre objet d'annotation qui implémente ce protocole. Ainsi, votre tête de MyAnnotation ressemble:

@interface MyAnnotation : NSObject<MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
} 

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 

// add an init method so you can set the coordinate property on startup 
- (id) initWithCoordinate:(CLLocationCoordinate2D)coord; 

et votre implémentation ressemble (MyAnnotation.m):

- (id) initWithCoordinate:(CLLocationCoordinate2D)coord 
{ 
    coordinate = coord; 
    return self; 
} 

Donc, pour ajouter votre annotation à la carte:

MyAnnotation * annotation = [[[MyAnnotation alloc] initWithCoordinate:coordinate] autorelease]; 
[self.mapView addAnnotation:annotation]; 

Si vous wan't un titre et sous-titre sur la légende d'annotation, vous devez ajouter les propriétés de titre et de sous-titre.

+0

C'est exactement ce dont j'avais besoin. Où devrais-je mettre le - (id) initWithCoordinate: (CLLocationCoordinate2D) coord; méthode? Dans mon fichier .h ou .m? –

+0

Pas de problème. J'ai mis à jour la réponse avec plus de détails :) – RedBlueThing

+0

Pour une raison quelconque, je n'ai pas de méthode '-initWithCoord:' trouvée quand j'essaie de construire et de lancer. –

32

Dans iPhone OS 4, il existe une nouvelle classe MKPointAnnotation qui est une implémentation concrète du protocole MKAnnotation.

+0

Merci d'avoir signalé cela joshrl –

+1

Ceci est super pratique si vous avez seulement besoin d'annotations de base. Merci! – radven

+4

MKPointAnnotation * pointAnnotation = [[MKPointAnnotation alloc] init]; pointAnnotation.coordinate = location.coordinate; [mkMapView addAnnotation: pointAnnotation]; –