Вы можете реализовать метод делегата 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 и в методе, сначала определите, какой кластер был выбран, и получите следующую аннотацию для выбора в этом кластере.