我是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天了!!!!
提前致谢 谢丽尔
答案 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对象是一个临时显示对象,用于在地图上显示当前可见的注释。对于地图上的每个注释,并不总是有注释视图。