0

我已经构建了一个使用 Kingpin 地图引脚聚类库的地图应用程序,(在此处找到)目前该库成功地近似了引脚的位置并放置了集群引脚。但是,如图所示,原始引脚从未被移除。我认为相关的代码是这样的:

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
MKAnnotationView *annotationView = nil;
if([annotation isKindOfClass:[KPAnnotation class]]){
    KPAnnotation *kingpinAnnotation = (KPAnnotation *)annotation;
    if ([kingpinAnnotation isCluster]) {
        annotationView=(MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"cluster"];
        if (annotationView==nil){
            annotationView=[[MKAnnotationView alloc]initWithAnnotation:kingpinAnnotation reuseIdentifier:@"cluster"];
            annotationView.canShowCallout=YES;

            annotationView.image=[UIImage imageNamed:@"icon_notif_recall.png"];
            annotationView.frame=CGRectMake(0,0,25,25);
        }
    }else{
        annotationView=(MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pin"];
        if (annotationView==nil){
            annotationView=[[MKAnnotationView alloc]initWithAnnotation:[kingpinAnnotation.annotations anyObject]reuseIdentifier:@"pin"];
            annotationView.canShowCallout=YES;

            annotationView.image=[UIImage imageNamed:@"icon_notif_recall.png"];
            annotationView.frame=CGRectMake(0,0,25,25);
        }
    }
    return annotationView;
}else if([annotation isKindOfClass:[REC_CustomAnnotation class]]){//Check that is our custom pin class
    REC_CustomAnnotation *myLocation = (REC_CustomAnnotation *)annotation;
    MKAnnotationView *annotationView=[mapView dequeueReusableAnnotationViewWithIdentifier:@"REC_CustomAnnotation"];

    if(annotationView==nil){
        annotationView=myLocation.annotationView;
    }else{
        annotationView.annotation=annotation;
    }
    return annotationView;
}else{
    return annotationView;
}

}

但我真的不确定出了什么问题。任何关于问题是什么或尝试的事情的想法将不胜感激。

4

1 回答 1

0

事实证明,上面发布的功能实际上是问题所在。但是,在理解主销如何工作方面,我完全走错了路。得到了一切工作:

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
MKAnnotationView *annotationView = nil;
if ([annotation isKindOfClass:[KPAnnotation class]]) {
    KPAnnotation *a = (KPAnnotation *)annotation;
    if ([annotation isKindOfClass:[MKUserLocation class]]){
        return nil;
    }
    if (a.isCluster) {
        annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"cluster"];
        if (annotationView == nil) {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:a reuseIdentifier:@"cluster"];
        }
        annotationView.image=[UIImage imageNamed:@"icon_notif_recall.png"];
        annotationView.frame=CGRectMake(0,0,25,25);
    }else {
        annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pin"];
        if (annotationView == nil) {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:[a.annotations anyObject] reuseIdentifier:@"pin"];
        }

        KPAnnotation *thisKPAnnot=(KPAnnotation *)annotation;
        NSMutableArray *arrayOfAnnots = [NSMutableArray arrayWithArray:[[thisKPAnnot annotations] allObjects]];
        if([arrayOfAnnots count]==1){
            REC_CustomAnnotation *thisAnnot=(REC_CustomAnnotation *)[arrayOfAnnots objectAtIndex:0];
            if(thisAnnot.type==1){
                annotationView.image=[UIImage imageNamed:@"icon_notif_facebook.png"];
            }else if(thisAnnot.type==2){
                annotationView.image=[UIImage imageNamed:@"icon_notif_twitter.png"];
            }else if(thisAnnot.type==3){
                annotationView.image=[UIImage imageNamed:@"icon_notif_instagram.png"];
            }else if(thisAnnot.type==4){
                annotationView.image=[UIImage imageNamed:@"icon_notif_foursquare.png"];
            }else if(thisAnnot.type==5){
                annotationView.image=[UIImage imageNamed:@"icon_notif_camera.png"];
            }else{
                annotationView.image=[UIImage imageNamed:@"icon_notif_recall.png"];
            }
        }else{annotationView.image=[UIImage imageNamed:@"icon_notif_recall.png"];}
        annotationView.frame=CGRectMake(0,0,25,25);
    }
    annotationView.canShowCallout = YES;
}
return annotationView;

}

我希望这最终能帮助将来的人。

于 2014-12-16T02:52:28.873 回答