2009-10-29 7 views
0

Je suis très nouveau dans le développement de XCode et de l'iPhone, alors s'il vous plaît gardez-moi si cette question est trop simple. Mais j'ai une carte et j'ai réussi à ajouter des images (pas des pins) pour mes annotations. Et je peux changer l'image lorsque l'utilisateur sélectionne l'une des annotations.mapkit et les annotations

J'ai créé une classe qui hérite de MKAnnotationView avec les méthodes suivantes: -

- (id)initWithAnnotation: 

- (void)setAnnotation: 

- (void)drawRect: 

et je me sers

- (void)touchesBegan 

savoir quand une annotation a été sélectionné. Et en touchesBegan je fais: -

UIImage *i = [UIImage imageNamed:@"A.png"]; 
self.image = i; 

pour changer l'image. Mais ce que je suis vraiment perplexe est comment puis-je changer l'image à son image originale lorsque les utilisateurs sélectionne l'annotation suivante. J'ai essayé: -

NSArray *selectedAnnotations = map.selectedAnnotations; 
for(id annotationView in selectedAnnotations) { 
[map deselectAnnotation:[annotationView annotation] animated:NO]; 
} 

mais elle erreurs

et moi avons essayé

for (MKAnnotationView *ann in map.selectedAnnotations){ 
if ([ann isMemberOfClass:[Place class]]) 
{ 
place = (Place *)ann; 
NSLog(@"second = %@"@" %f"@" %f", place.title, place.longitude, place.latitude); 
if (currentPlaceID == place.placeID) { 
//UIImage *i = [UIImage imageNamed:@"A.png"]; 

//ann.image = i; 
} 
else { 
UIImage *i = [UIImage imageNamed:@"pin.png"]; 

ann.image = i; 
} 
} 

} 

le code ci-dessus fonctionne bien jusqu'à ce que je à ann.image = i; alors il erreurs. Les erreurs que je reçois sont: -

*** -[Place setImage:]: unrecognized selector sent to instance 0x4514370 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[Place setImage:]: unrecognized selector sent to instance 0x4514370' 

Oui, je peux voir que mon objet lieu n'a pas une image si c'est pourquoi il ne va pas. Mais si je crée une propriété d'image sur mon objet place - comment cela va changer l'image des annotations que ce que j'essaie de faire.

S'il vous plaît aviser comme je suis allé dans les cercles sur celui-ci pendant 2 jours maintenant !!!!

Merci à l'avance Cheryl

Répondre

0

Cheryl,

Je ne suis pas tout à fait ce que vous essayez de faire, mais voici quelques réflexions:

Voici ce que je ferais pour restaurer l'image originale:

Dans votre sous-classe de MKAnnotationView, ajouter deux propriétés UIImage,

sapins tImage et secondImage, mis en place pour conserver.

Lorsque vous initiez la vue d'annotation, configurez les deux images. (Au point où vous attribuez l'image à votre vue d'annotation, également enregistrer sur votre nouvelle propriété firstImage)

Ensuite, vous pouvez dire

self.image = firstImage;

ou

self.image = secondImage. 

Cela va troquer l'image appropriée en place, tout en gardant l'autre image autour de restaurer.

Votre code:

NSArray *selectedAnnotations = map.selectedAnnotations; for(id annotationView in selectedAnnotations) { [map  
deselectAnnotation:[annotationView annotation] animated:NO]; } 

n'est pas juste. Il demande à la carte un tableau d'annotations, puis les traite comme des VUES d'annotation.

Une annotation est un objet de modèle de données. Il contient les données décrivant une annotation.

Un objet VIEW d'annotation est un objet d'affichage temporaire utilisé pour afficher une annotation sur la carte si elle est actuellement visible. Il n'y a pas toujours d'annotations pour chaque annotation sur la carte.