mapkit和注释

时间:2009-10-29 14:56:09

标签: iphone mapkit annotations

我是XCode和iPhone开发的新手,所以如果这个问题太简单,请耐心等待。但我有一张地图,我已经成功地为它添加了图像(而不是图钉)作为我的注释。当用户选择其中一个注释时,我可以更改图像。

我使用以下方法创建了一个继承自MKAnnotationView的类: -

- (id)initWithAnnotation:

- (void)setAnnotation:

- (void)drawRect:

我正在使用

- (void)touchesBegan

了解何时选择了注释。在touchesBegan我正在做: -

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

更改图像。但我真正难以理解的是当用户选择下一个注释时,如何将图像更改回原始图像。我试过了: -

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

但是错误

我试过

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;
}
}

}

上面的代码工作正常,直到我到了ann.image = i;然后它错了。我得到的错误是: -

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

是的我可以看到我的位置对象没有图像,这就是它出错的原因。但是如果我在我的位置对象上创建一个图像属性 - 这将如何改变我正在尝试做的注释图像。

请告知我,因为我已经在这个圈子里转了2天了!!!!

提前致谢 谢丽尔

1 个答案:

答案 0 :(得分:0)

谢丽尔

我并不完全遵循你想要做的事情,但这里有一些想法:

以下是恢复原始图像的方法:

在MKAnnotationView的子类中,添加两个UIImage属性

firstImage和secondImage,设置为保留。

初始化注释视图时,请设置两个图像。 (在将图像分配给注释视图的位置,还将其保存到新的firstImage属性中)

然后,你可以说

self.image = firstImage;

self.image = secondImage.

这会将适当的图像交换到位,同时保持其他图像还原。

您的代码:

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

不对。它向地图询问注释数组,然后将它们视为注释VIEW。

注释是数据模型对象。它包含描述注释的数据。

注释VIEW对象是一个临时显示对象,用于在地图上显示当前可见的注释。对于地图上的每个注释,并不总是有注释视图。