Как обрабатывать несколько контактов будут сброшены на одну долготу и широту в iphone SDK?
У меня есть одна задача - разработать приложение с помощью map-kit.
Я получаю несколько контактов с сервера и один контакт, который мне нужно удалить из текущего местоположения пользователя. Этот вывод текущего местоположения пользователя должен быть зеленым, а другие выводы, поступающие с сервера, должны быть другого цвета. Как я могу это сделать?
и другой вопрос, я получаю некоторые булавки друг на друга, потому что там широта и долгота имеют некоторые незначительные различия. поэтому в той конкретной точке, где контакты будут сбрасываться друг на друга, в эту точку я хочу дать одну кнопку (во всплывающем окне вывода), которая обрабатывает небольшую разницу между шипами и длинными выводами, означает, что кнопка сообщает следующий вывод и как только когда кнопка нажата, всплывающее окно должно перейти на другой вывод, который еще не выбран, и открыть его всплывающее окно, которое также сообщает следующий вывод. как я могу это сделать??
я использую такой код для создания пин
для получения булавки пользователя пользователя
Place* current = [[[Place alloc] init] autorelease];
current.name = @"You are here.";
current.latitude = coordinate.latitude;
current.longitude = coordinate.longitude;
PlaceMark *from = [[[PlaceMark alloc] initWithPlace:current] autorelease];
[mapView addAnnotation:from];
для получения булавки местоположения сервера.
int s=1;
for (j=0 ; j < i - 1 ; j++)
{
//points = [[NSString alloc] initWithFormat:@"point%d",s];
reports = [NSArray arrayWithArray:lat];
NSString *titles = [[NSString alloc] initWithFormat:@"%@",[tit objectAtIndex:j]];
NSString *description = [[NSString alloc] initWithFormat:@"%@",[des objectAtIndex:j]];
float latitude=[[lat objectAtIndex:j] floatValue];
float longitude=[[lon objectAtIndex:j] floatValue];
Place* home = [[[Place alloc] init] autorelease];
home.name = [NSString stringWithFormat:@"%@",titles];
home.description = [NSString stringWithFormat:@"%@",description];
home.latitude = latitude;
home.longitude = longitude;
PlaceMark *from = [[[PlaceMark alloc] initWithPlace:home] autorelease]; [mapView addAnnotation:from];
s++;
[self centerMap];
}
этот код для создания там всплывающего окна.
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation{
if (annotation == mapView.userLocation)
return nil;
MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier: @"asdf"];
if (pin == nil)
pin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier: @"asdf"] autorelease];
else
pin.annotation = annotation;
pin.userInteractionEnabled = YES;
UIButton *disclosureButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[disclosureButton setFrame:CGRectMake(0, 0, 30, 30)];
pin.rightCalloutAccessoryView = disclosureButton;
pin.pinColor = MKPinAnnotationColorRed;
pin.animatesDrop = YES;
[pin setEnabled:YES];
[pin setCanShowCallout:YES];
return pin;}
этот код для обработки событий означает, что pin вызывает действие кнопки.
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{ nslog (do something)
}
Все мои коды работают правильно. я хочу просто ответить на приведенные выше вопросы.. пожалуйста, помогите мне
1 ответ
Ответ на первый вопрос:
Сначала найдите свое текущее местоположение, обратитесь к ЭТОМУ ОТВЕТУ со всеми комментариями, но используйте следующий код, чтобы сделать это.
#pragma mark -
#pragma mark Location Manager functions
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{ NSLog(@"Inside Location Delegate");
/*NSString *val=[[NSString alloc] initWithFormat:@"Previous Location is:\n Lattitude : %f\n Longitude : %f \n\n Current location is :\n Lattitude : %f\n Longitude : %f",oldLocation.coordinate.latitude, oldLocation.coordinate.longitude,newLocation.coordinate.latitude, newLocation.coordinate.longitude];
NSLog(@"%@",val);*/
[self setMapCenter:newLocation.coordinate];
PlaceMark *addAnnotation = [[[PlaceMark alloc] initWithCoordinate:newLocation.coordinate] retain];
[addAnnotation setTitle:@"Your Location"];
[addAnnotation setSubTitle:@""];
[self._mapView addAnnotation:addAnnotation];
userAnnoFlag = TRUE;
[self._mapView selectAnnotation:[[self._mapView annotations] lastObject] animated:YES];
[self.locationManager stopUpdatingLocation];
}
Затем используйте следующий метод для установки контактов:
#pragma mark -
#pragma mark Annotations Functions
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
@try {
MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MyPin"];
annView.animatesDrop=FALSE;
annView.canShowCallout = YES;
[annView setSelected:YES];
if (userAnnoFlag == TRUE){
annView.pinColor = MKPinAnnotationColorRed;
userAnnoFlag = FALSE;
}
if ([mapView userLocation]) {
annView.pinColor = MKPinAnnotationColorRed;
}
else{
annView.pinColor = MKPinAnnotationColorGreen;
}
annView.calloutOffset = CGPointMake(-5, 5);
return annView;
}
@catch (NSException * e) {
}
@finally {
}
return 0;
}
И в случае вашего второго вопроса, вам лучше проверить разницу между широтой и долготой вручную, и передать ее, если она имеет достаточную разницу (в соответствии с вашими требованиями).