Ios MKMapView在引脚颜色注释之间切换

Ios MKMapView在引脚颜色注释之间切换,ios,ios7,mkmapview,mkannotation,Ios,Ios7,Mkmapview,Mkannotation,我的地图上有一串别针,一些是红色的,一些是绿色的。最初的颜色还可以。但是,当我使用地图视图并点击一些绿色图标时,一些红色图标将变为绿色。当它们位于当前视图区域之外并移动到视图区域时,可能会发生这种情况。 有人吗 以下是我的代码片段: - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id < MKAnnotation >)annotation{ if(((MyAnnotation

我的地图上有一串别针,一些是红色的,一些是绿色的。最初的颜色还可以。但是,当我使用地图视图并点击一些绿色图标时,一些红色图标将变为绿色。当它们位于当前视图区域之外并移动到视图区域时,可能会发生这种情况。 有人吗

以下是我的代码片段:

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

    if(((MyAnnotation*)annotation).isGreen){
        AnnotationViewID = @"MyAnnotationGreen";
    }else{
        AnnotationViewID = @"MyAnnotationRed";
    }

    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

    if (annotationView == nil)
    {
        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
    }
-(MKAnnotationView*)映射视图:(MKMapView*)注释的映射视图:(id)注释{
if(((MyAnnotation*)annotation.isGreen){
AnnotationViewID=@“MyAnnotationGreen”;
}否则{
AnnotationViewID=@“MyAnnotationRed”;
}
MKPinAnnotationView*annotationView=(MKPinAnnotationView*)[theMapView退出队列可重用AnnotationViewWithIdentifier:AnnotationViewID];
如果(注释视图==nil)
{
annotationView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation重用标识符:AnnotationViewID];
}

您应该使用MyAnnotation对象的isGreen属性为MKPinAnnotationView对象指定颜色。重用代码可能会给您一个没有正确设置所有属性的对象,特别是因为您使用的是不同标识符下的完全相同的类。您不应该依赖所有属性的有效性视图缓存中的出列对象的值(例如uitableview出列)

做一些类似于:

MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

if (annotationView == nil)
{
    annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
}
[annotationView setPinColor:(annotation.isGreen)? MKPinAnnotationColorGreen : MKPinAnnotationColorRed];

AnnotationViewID
不应该是局部变量吗?