viewForAnnotation中的注释标识符

时间:2013-06-28 18:49:15

标签: ios annotations mkmapview mapkit

我正在创建自定义注释,我正在尝试使用dequeueReusableAnnotation。 引脚之间的差异是用于引脚图像的png。

我创建了myAnnotation类,在创建注释时使用了这段代码:

  if([category isEqualToString:@"anti-social-behaviour"]){
        point.annotationImg=@"A.png";

    }
    else
        if([category isEqualToString:@"burglary"]){
            point.annotationImg=@"B.png";

        }
        else....

现在在viewForAnnotation中:

 - (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation
     {

if ([annotation class] == MKUserLocation.class) {
    return nil;

 }

static NSString *identifier = @"myPin";

MKPinAnnotationView *pinView = nil;

pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

if (pinView == nil)
{
    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
    pinView.canShowCallout = YES;
    pinView.image = [UIImage imageNamed:[(Annotation*)annotation annotationImg]];

}


return pinView;

}

我知道我必须以某种方式使用标识符,但我没弄明白。 现在的问题是,我第一次加载引脚是好的,第二次是图像混乱。 有什么建议吗?

1 个答案:

答案 0 :(得分:4)

我建议在if / else块之外实现以下代码行,因为当你使MKPinAnnotationView出列时会发生什么,如果它返回一个视图,你只是返回出列的仍然引用旧图像的视图。

所以你需要在if / else之后设置图像,它应该像

if (pinView == nil)
{
    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
    pinView.canShowCallout = YES;
}

pinView.image = [UIImage imageNamed:[(Annotation*)annotation annotationImg]];