【问题标题】:Making map pins spread out from a cluster使地图针从集群中展开
【发布时间】:2011-10-25 08:42:00
【问题描述】:
我的地图有两个自定义注释类:一个用于与某个位置关联的单个帖子,另一个用于这些帖子的集群。集群存储指向它包含的所有帖子的指针,以及中心纬度/经度位置(使用它包含的帖子的位置计算)。我的行为是,当我单击集群注释时,它会删除集群并将其帖子添加到地图中。我想要的是在将集群扩展为动画时更改 pin-drop 注释,其中新的引脚从集群的中心向外移动到它们的新位置。但是,我也有一些帖子由于与其他点的距离而从不聚集。显然他们不能有这个动画,因为没有相关的位置让他们向外移动。有谁知道我如何实现这个?
【问题讨论】:
标签:
iphone
mkmapview
mapkit
mkannotation
【解决方案1】:
使引脚从集群中心展开实际上非常容易。当您制作新的单引脚注释时,将它们的坐标设置为集群中心:
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;
}];
关于非集群管脚的问题,如果不详细了解实现就很难回答,但我认为有很多可能性。你可以有一个简单的标志来跳过动画。或者你可以完全一样地对待它们,即使它们是单独的,仍然“聚集”它们,并且仍然为它们设置动画......不是最高效率,但它会工作并且你的代码会更干净。