Удаление метки текущего местоположения и отдельного местоположения mkmapview

У меня есть несколько проблем с MKMapView! Я новичок в картировании! Что я пытаюсь сделать:

Mapview загружает и сбрасывает метку на текущее местоположение пользователя и адрес выбранного клиента. Этот код удаляет метку на адресе выбранного клиента, но я не могу заставить его добавить один на текущее местоположение пользователя!

Есть идеи почему?

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:postcodeForMap
             completionHandler:^(NSArray* placemarks, NSError* error){
                     NSLog(@"Co-ordinate geocode is %@", [placemarks objectAtIndex:0]);
                 for (CLPlacemark* aPlacemark in placemarks)

                 {
                     CLPlacemark *topResult = [placemarks objectAtIndex:0];
                     MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
                     MKPlacemark *mPlacemark = [[MKPlacemark alloc] initWithCoordinate:mapView.userLocation.location.coordinate addressDictionary:nil];



                     MKCoordinateRegion region = mapView.region;
                     region.center = placemark.region.center;
                     region.span.longitudeDelta /= 8.0;
                     region.span.latitudeDelta /= 8.0;

                     [mapView setRegion:region animated:YES];
                     [mapView addAnnotation:placemark];
                     [mapView addAnnotation:mPlacemark];

                 }
             }
 ];

2 ответа

Вы можете получить местоположение пользователя, используя следующий код

-(void)viewDidLoad{
    CLLocationManager *locationManager=[[CLLocationManager alloc] init];
    locationManager.delegate=self;//THIS IS IMPORTANT
    [locationManager startUpdatingLocation];
}

Когда вы говорите менеджеру местоположения, чтобы получить местоположения, если Allowed locationmanager вызывает его метод делегата, см. ниже

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
          //newLocation is your current Location

   self.userLocation=newLocation;//Once you got the location generate the places..
   [self generatePlaces];
   [manager stopUpdatingLocation];

}

-(void)generatePlaces{
  CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:postcodeForMap
             completionHandler:^(NSArray* placemarks, NSError* error){
                     NSLog(@"Co-ordinate geocode is %@", [placemarks objectAtIndex:0]);
                 for (CLPlacemark* aPlacemark in placemarks)

                 {
                     CLPlacemark *topResult = [placemarks objectAtIndex:0];
                     MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
                     //EDITED
                     MKPlacemark *mPlacemark = [[MKPlacemark alloc] initWithCoordinate:self.userLocation.coordinate addressDictionary:nil];



                     MKCoordinateRegion region = mapView.region;
                     region.center = placemark.region.center;
                     region.span.longitudeDelta /= 8.0;
                     region.span.latitudeDelta /= 8.0;

                     [mapView setRegion:region animated:YES];
                     [mapView addAnnotation:placemark];
                     [mapView addAnnotation:mPlacemark];

                 }
             }
 ];
}

Для вашего рассмотрения. Легко перетащить любое изображение, URL или пин-код в текущее местоположение пользователя.

Для этого вы должны реализовать.

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

if (annotation == mapView.userLocation)
{

    MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
    annView.pinColor = MKPinAnnotationColorRed;
    annView.animatesDrop=TRUE;
    annView.canShowCallout = YES;

    return annView;

}
}
Другие вопросы по тегам