Objective c 目标C-一次只有一个pin?

Objective c 目标C-一次只有一个pin?,objective-c,mkmapview,core-location,mkannotation,mkannotationview,Objective C,Mkmapview,Core Location,Mkannotation,Mkannotationview,我在地图视图的顶部有两组不同的图钉。首先显示一个pin,它是用户位置,然后在搜索栏中搜索位置时,会根据位置显示多个pin。我想一次显示一个pin。搜索位置后,用户的位置pin应消失,选择搜索的多个pin之一后,其他pin应消失 这是我的密码: #import "UbicacionVC.h" #import "SWRevealViewController.h" #import <MapKit/Mapkit.h> #import "Location.h" @interfac

我在地图视图的顶部有两组不同的图钉。首先显示一个pin,它是用户位置,然后在搜索栏中搜索位置时,会根据位置显示多个pin。我想一次显示一个pin。搜索位置后,用户的位置pin应消失,选择搜索的多个pin之一后,其他pin应消失

这是我的密码:

 #import "UbicacionVC.h"
 #import "SWRevealViewController.h"
 #import <MapKit/Mapkit.h>
 #import "Location.h"


 @interface UbicacionVC ()

 @end

 @implementation UbicacionVC
 @synthesize mapView;

 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     [self inicializarComponentes];
     self.mapView.delegate = self;
     self.searchBar.delegate = self;
 }



 - (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
     // Dispose of any resources that can be recreated.
 }

 - (void)inicializarComponentes {
     [self.btnContinuar.layer setCornerRadius:20.0f];
     [self.btnCancelar.layer setCornerRadius:20.0f];

     ////
     UITapGestureRecognizer *gestureMenu = [[UITapGestureRecognizer                                                   alloc] init];
     [gestureMenu addTarget:self.revealViewController                                              action:@selector(revealToggle:)];
     [gestureMenu setCancelsTouchesInView:NO];
     [self.btnLeftMenu addGestureRecognizer:gestureMenu];

     [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
////
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    [self->locationManager requestWhenInUseAuthorization];

[locationManager startUpdatingLocation];



 }



 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
     NSLog(@"OldLocation %f %f", oldLocation.coordinate.latitude, oldLocation.coordinate.longitude);
     NSLog(@"NewLocation %f %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
     CLLocationDegrees lat = newLocation.coordinate.latitude;
     CLLocationDegrees lon = newLocation.coordinate.longitude;
     CLLocation * location = [[CLLocation alloc]initWithLatitude:lat longitude:lon];
     self.viewRegion =      MKCoordinateRegionMakeWithDistance(location.coordinate, 500, 500);
[self.mapView setRegion:self.viewRegion];


 }


 -(void)localSearch:(NSString*)searchString{

     [self.mapView setRegion:self.viewRegion];

     MKLocalSearchRequest * request = [[MKLocalSearchRequest alloc] init];
     request.naturalLanguageQuery = [searchString lowercaseString];
     request.region = self.viewRegion;

     MKLocalSearch* search = [[MKLocalSearch alloc] initWithRequest:request];
     [search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {

         if([response.mapItems count] == 0){
        NSLog(@"No matches \n");
    }
         else{
             for(MKMapItem * item in response.mapItems){
                 Location * pin = [[Location alloc] initWith:item.placemark.title andSubtitle:item.phoneNumber andCoordinate:item.placemark.coordinate andImageName:@"" andURL:item.url.absoluteString];
                 [self.mapView addAnnotation:pin];


        }
    }

}];

 }

 #pragma mark UISearchBarDelegate

 -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{

     [searchBar resignFirstResponder];
     [self.mapView removeAnnotations:[self.mapView annotations]];
     [self localSearch:searchBar.text];

 }

 #pragma mark MKMapViewDelegate

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

     static NSString* identifier = @"reusablePin";

     MKAnnotationView * aView = [sender dequeueReusableAnnotationViewWithIdentifier:identifier];
     if(!aView){

         aView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
         aView.canShowCallout = YES;
     }

     aView.annotation = annotation;
     return aView;
 }


 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
 {

          NSLog(@"%@",view.annotation.title);

          NSLog(@"%@",view.annotation.subtitle);


 }
我想一次显示一个pin

休息一下怎么样;在循环中

for(MKMapItem * item in response.mapItems){
    Location * pin = [[Location alloc] initWith:item.placemark.title andSubtitle:item.phoneNumber andCoordinate:item.placemark.coordinate andImageName:@"" andURL:item.url.absoluteString];
    [self.mapView addAnnotation:pin];

    // one pin showed
    break;
}
搜索位置后,用户的位置pin应消失, 一旦你选择了你搜索的多个PIN中的一个,其他的应该消失

您可以使用didSelectAnnotationView方法

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
  // once you select one of the multiple pins, the others should disappear.
  for (MKPointAnnotation *annotation in mapView.annotations) {
    if (view.annotation != annotation) {
        [mapView removeAnnotation:annotation];
        NSLog(@"yes!!");
    }
  }
}