Muhammad Salman
Muhammad Salman

Reputation: 553

Remove all the annotation pin except one

I have a cluster of annotation pins in map view. When I clicked on the pin I get the index of that pin. I want that if I click on the pin than all the pins are hide except that on which user clicked and if again I click on that pin all the pins are shown.

Here is the code in which I got the index of the selected pin.

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


            }

Upvotes: 0

Views: 149

Answers (1)

MD.
MD.

Reputation: 1167

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

in 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];

}

Upvotes: 1

Related Questions