在MKAnnotationView中更新图像

时间:2011-08-20 00:38:54

标签: iphone objective-c ios mapkit mkannotation

我正在编写一个应用程序,它在leftCalloutAccessoryView中显示来自服务器的缩略图。在我实际获得图像之前,我会显示一个地标图像。下载照片后,会调用一个方法,我想更新该图像而不删除原始注释并放置另一个注释。我只想将图像从占位符切换到下载的缩略图。下面的代码不起作用,但如果有人能告诉我我是否在正确的轨道上,那就太棒了。

MyAnnotationClass *annotation=[[MyAnnotationClass alloc] initWithCoordinate:item.location];
[annotation setItem:item];
if(item.title){
    annotation.name=item.title;
}
else{
    annotation.name=@"no title";
}
[annotation setDescription:[[NSString alloc] initWithFormat:@"Views:%d Likes:%d Comments:%d",item.views,item.likes,item.comments]];
[annotation setImage:[[photo.thumb copyWithDimensions: CGSizeMake(32.0, 32.0)] autorelease]];

MKAnnotationView *av=[__mapView viewForAnnotation:annotation];
UIImageView *imageView=[[UIImageView alloc] initWithImage:annotation.image];
imageView.frame=CGRectMake(0.0, 0.0, 32.0, 32.0);
av.leftCalloutAccessoryView=imageView;
[annotation release];

我一直在这里寻找相当长的时间,但我找不到的任何东西都能满足我的需要。感谢

1 个答案:

答案 0 :(得分:4)

如果注释已经在地图上并且您想要更新它,请不要创建新注释。

而是在地图视图的annotations数组中找到要更新的注释并更新其属性。然后在现有注释上调用viewForAnnotation:并更新leftCalloutAccessoryView

此外,请确保viewForAnnotation 委托方法具有通过检查注释的属性将leftCalloutAccessoryView设置为占位符图像或实际图像的逻辑(并非总是如此)占位符图片)。

This other question有一些可能有帮助的示例代码。