Удаление метки текущего местоположения и отдельного местоположения 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;
}
}