MapKit несколько пинов одинаковых координат, другой выбор информации - PullRequest
4 голосов
/ 07 июля 2011

У меня следующая ситуация: - 3 контакта с одинаковыми координатами, но разными заголовком и информацией - на карте есть только один контакт

Можно нажать несколько раз на этот контакт, и отображаемая аннотация: - первое нажатие -> примечание для контакта 1 - второе нажатие -> примечание для контакта 2 - третий нажатие -> примечание для контакта 3 - четвертое нажатие -> примечание для контакта 1

какие-нибудь идеи, как я должен это реализовать?

1 Ответ

2 голосов
/ 07 июля 2011

Вы можете реализовать метод делегата didSelectAnnotationView и выбрать «правильную» аннотацию самостоятельно в зависимости от того, какой был последний «правильный» выбор.

Если у вас только эти аннотации включеныкарта и только один их кластер, тогда вы можете оставить один int ивар, который будет помнить, какой была последняя выбранная аннотация, и увеличить его в методе делегата.

Например:

// In .h
int lastAnnotationSelected;

// In .m
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    int nextAnnotationToSelect = (lastAnnotationSelected + 1) 
                                     % mapView.annotations.count;

    id<MKAnnotation> nextAnnotation =
        [mapView.annotations objectAtIndex:nextAnnotationToSelect];

    [mapView selectAnnotation:nextAnnotation animated:YES];

    lastAnnotationSelected = nextAnnotationToSelect;
}

Если у вас также включен showsUserLocation, вам нужно будет добавить проверку для MKUserLocation в этом методе, пропустить ее (если вы хотите) и перейти к следующей аннотации вкластер.

Кроме того, если у вас есть несколько кластеров аннотаций (3 в координатной точке A, 5 в координатной точке B, 4 в координатной точке C и т. д.), вам необходимо отслеживать массив lastAnnotationSelectedints и в методе, сначала определите, какой кластер был выбран, и получите следующую аннотацию для выбора в этом кластере.

...