使地图引脚从群集中展开

时间:2011-10-25 08:42:01

标签: iphone mkmapview mapkit mkannotation

我的地图有两个自定义注释类:一个用于绑定到某个位置的单个帖子,另一个用于这些帖子的集群。群集存储指向其包含的所有帖子的指针,以及中央纬度/长度位置(使用其包含的帖子的位置计算)。我有这样的行为,当我点击一个集群注释时,它删除集群并将其帖子添加到地图。我想要的是在将群集扩展为动画时更改针脚注释,从而新针脚从群集中心向外移动到新位置。但是,我也有一些从未聚集的帖子,因为它们与其他点的距离很远。显然他们不能拥有这个动画,因为没有相关的位置让他们向外移动。有谁知道我如何实现这个?

1 个答案:

答案 0 :(得分:3)

使引脚从群集中心扩展实际上非常简单。进行新的单引脚注释时,请将其坐标设置为集群中心:

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;
}];

至于非群集引脚的问题,如果不详细了解实现就很难回答,但我认为有很多可能性。你可以只有一个跳过动画的简单标志。或者你可以完全相同地处理它们,并且即使它们是单独的,它们仍然可以“聚集”它们,并且仍然可以为它们设置动画...不是最大效率,但它会起作用并且你的代码会更清晰。