2013-06-28 9 views
1

我正在创建自定义注释,我试图使用dequeueReusableAnnotation。 引脚之间的区别是用于引脚图像的png。viewForAnnotation中的注释标识符

我已经创建myAnnotation类和我使用的时候,我创建注释此代码:在viewForAnnotation

if([category isEqualToString:@"anti-social-behaviour"]){ 
     [email protected]"A.png"; 

    } 
    else 
     if([category isEqualToString:@"burglary"]){ 
      [email protected]"B.png"; 

     } 
     else.... 

现在:

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

}

我知道我必须不知何故使用标识符,但我没有弄明白。 现在的问题是,我第一次加载的引脚很好,第二个图像弄乱了。 有什么建议吗?

+0

外面我应该使用大量的if/else给每个它的类别标注? – BlackM

回答

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]]; 
+0

我也建议更新视图的注释属性以及图像。单独的问题OP可能会看到图像被替换为默认的pin,因为代码创建MKPinAnnotationView而不是普通的MKAnnotationView。 – Anna