我正在放置联系人的针脚,有些针脚具有相同的经度和纬度。当 Pin 图被放到地图上时,它们会显示出来,但是当我触摸一次有两个以上联系人时,我只会看到第一个和最后一个。
那么,在相同的经纬度上处理多个联系人的最佳方式是什么?
理想情况下,我想我可以显示该位置的数量,然后我希望用户可以继续触摸图钉,它会循环浏览注释。我不确定该怎么做,或者是否有更好的解决方案。
感谢您对问题的任何帮助或见解。
我正在放置联系人的针脚,有些针脚具有相同的经度和纬度。当 Pin 图被放到地图上时,它们会显示出来,但是当我触摸一次有两个以上联系人时,我只会看到第一个和最后一个。
那么,在相同的经纬度上处理多个联系人的最佳方式是什么?
理想情况下,我想我可以显示该位置的数量,然后我希望用户可以继续触摸图钉,它会循环浏览注释。我不确定该怎么做,或者是否有更好的解决方案。
感谢您对问题的任何帮助或见解。
这是一个想法:
在现有注释上运行 K-means 算法(参见https://stackoverflow.com/a/5978803/412916),并在引脚密度超过任意数字时删除集群注释。如果用户触摸针脚,您可以添加注释并为来自集群针脚的动画制作动画。我建议您在动画时禁用交互,因为逻辑变得混乱。
我会让一个注释代表该纬度和经度的所有联系人/对象的 NSDictionary。用不同颜色的 pin 表示多个 lat&long。
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
static NSString *identifier = @"AnnotationIdentifier";
if ([annotation isKindOfClass:[NSDictionary class]]) {
//Code here to show red pin vs. blue pin
}
}
你需要一个自定义的 MKPinAnnotationView 子类的 init 方法,比如:
-(id)initWithCoordinate:(CLLocationCoordinate2D) coordinateC:(NSDictionary *)dictionaryParam;
最后,要在触摸该引脚时运行一个方法,如下所示:
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
if ([view.annotation class] == [NSDictionary class]) {
NSLog(@"multiple");
// more code here to run a view for multiple contacts
}
else
{
...
}
}