Заставить булавки карты распространяться от группы - PullRequest
3 голосов
/ 25 октября 2011

У меня есть два пользовательских класса аннотаций для моей карты: один для одного поста, привязанного к местоположению, и один для кластера этих постов.В кластере хранятся указатели на все содержащиеся в нем сообщения, а также центральное местоположение по широте / долготе (рассчитывается с использованием положений содержащихся в нем сообщений).У меня такое поведение, когда я нажимаю на аннотацию кластера, он удаляет кластер и добавляет свои посты на карту.То, что я хочу, это изменить аннотацию с булавками при расширении кластеров до анимации, посредством чего новые контакты перемещаются наружу из центра кластера в их новые местоположения.Однако у меня также есть некоторые посты, которые никогда не группируются из-за их удаленности от других точек.Очевидно, что у них не может быть этой анимации, так как у них нет связанного места для перемещения наружу.Кто-нибудь знает, как я мог бы это реализовать?

1 Ответ

3 голосов
/ 25 октября 2011

Расширить штифты из центра кластера на самом деле довольно просто. При создании новых однопиновых аннотаций установите их координаты в центре кластера:

id <MKAnnotation> pin;
CLLocationCoordinate2D clusterCenter;
// ...
pin.coordinate = clusterCenter;

В viewForAnnotation: не анимируйте новые контакты:

MKPinAnnotationView *pinView;
// ...
pinView.animatesDrop = NO;

Затем, после того, как вы добавили булавки в вид карты, вы анимируете перемещение их в их реальные позиции:

MKMapView *mapView;
id <MKAnnotation> pin;
// ...
// probably loop over annotations
[mapView addAnnotation:pin];
NSTimeInterval interval = 1.0; // or whatever
[UIView animateWithDuration:interval animations:^{
    // probably loop over annotations here again
    CLLocationCoordinate2D realCoord;
    // ...
    pin.coordinate = realCoord;
}];

Что касается проблемы некластеризованных выводов, то на нее сложнее ответить, не зная детали реализации, но я думаю, что есть много возможностей. Вы могли бы просто иметь простой флаг, который пропускает анимацию. Или вы можете просто обращаться с ними точно так же, и при этом «кластеризовать» их, даже когда они соло, и все же анимировать их ... не максимально эффективно, но это будет работать, и ваш код будет чище.

...