2016-04-25 8 views
0

Ich habe eine Gruppe von Annotation Pins in der Kartenansicht. Wenn ich auf den Pin geklickt habe, bekomme ich den Index des Pins. Ich möchte, dass, wenn ich auf den Stift klicke, alle Pins außer demjenigen versteckt sind, auf den der Benutzer geklickt hat und wenn ich wieder auf diesen Pin klicke, werden alle Pins angezeigt.Entfernen Sie alle Annotation pin mit Ausnahme einer

Hier ist der Code, in dem ich den Index des ausgewählten Pins erhalten habe.

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


      } 

Antwort

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 

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

}