删除除一个之外的所有注释引脚

时间:2016-04-25 14:04:05

标签: ios objective-c mkmapview mkannotation

我在地图视图中有一组注释引脚。当我点击该引脚时,我得到该引脚的索引。我希望如果我点击引脚而不是所有的引脚都隐藏,除了用户点击之外,如果再点击那个引脚,所有引脚都会显示。

以下是我获得所选引脚索引的代码。

CPointAnnotation *cAnno=(CPointAnnotation*)view.annotation;
        NSInteger index=cAnno.index;

        if (index<hospitalsArry.count) {
            selectedHospital=[hospitalsArry objectAtIndex:index];

            if (selectedIndex==index) {

                selectedIndex=-1;



                return;
            }else{
                selectedIndex=index;

                [[self.mapView viewForAnnotation:cAnno] setHidden:NO];


            }

1 个答案:

答案 0 :(得分:1)

CustomAnnotation.h

#import <MapKit/MapKit.h>

@interface CustomAnnotation : NSObject <MKAnnotation>

@property (nonatomic,readonly)CLLocationCoordinate2D coordinate;
@property (nonatomic, copy)NSString *title;
@property (nonatomic, strong)MKAnnotationView *annotaitonView;

-(id)initWithTitle:(NSString *)newTitle coordinates:(CLLocationCoordinate2D)newCoordinate;
-(MKAnnotationView *)createAnnotationView;
@end

CustomAnnotation.m

@implementation CustomAnnotation

-(id)initWithTitle:(NSString *)newTitle coordinates:(CLLocationCoordinate2D)newCoordinate
{
    if (self = [super init]) {
        _title = newTitle;
        _coordinate = newCoordinate;
    }

    return self;
}
-(MKAnnotationView *)createAnnotationView
{
    MKAnnotationView *annView=[[MKAnnotationView alloc]initWithAnnotation:self reuseIdentifier:@"MyCustomAnnoation"];
    annView.enabled=TRUE;
    annView.canShowCallout=TRUE;
    annView.image=[UIImage imageNamed:@"map-pin-marker-circle-128.png"];
    return annView;
}
@end
MapViewController.m

中的

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

    if ([annotation isKindOfClass:[MKPointAnnotation class]]) {
        return nil;
    }

    if ([annotation isKindOfClass:[CustomAnnotation class]]) {

        CustomAnnotation *myAnn=(CustomAnnotation *)annotation;


        MKAnnotationView *annView=[mapView dequeueReusableAnnotationViewWithIdentifier:@"MyCustomAnnoation"];
        if (annView == nil) {

            annView=[myAnn createAnnotationView];
        }
        else
        {
            annView.annotation=myAnn;
        }
        myAnn.annotaitonView=annView;

        return annView;
    }
    else
        return nil;

}

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    [self hideOtherPinsByIgnoringThis:view];
}


-(void)hideOtherPinsByIgnoringThis:(MKAnnotationView *)ann
{


    NSArray *arrAllPins=[self.myMapView annotations];

    //Find selected Annotation View in all pins on map
    NSMutableArray *removeAnn=[[NSMutableArray alloc]init];
    for (CustomAnnotation *annotation in arrAllPins)
    {
        if (annotation.annotaitonView != ann) {
            [removeAnn addObject:annotation];
        }
    }
    [self.myMapView removeAnnotations:removeAnn];

}