OpenClusterMapView 是 iOS 中 MKMapView
的一个简单易用的扩展。如果您需要在地图上显示很多标注,这个类就是为您设计的。
OCMapView 可以自动将标注组合成簇,速度非常快。它可以与任何 iOS 应用程序一起工作。
您可能已经遇到过这样的问题:当向 MKMapView
添加几百个标注时,它会变得卡顿,用户体验不佳。
许多开发者认为,由于 iDevice 内存容量有限,iOS 无法处理 MKMapView
上的大量标注。因此,他们开始使用一些相当简单的过滤方法来自己管理标注,这只会让用户更加困惑。
实际上,问题并不在于内存。这更多是由于 annotationViews 是 UIViews
,这些视图执行非常缓慢。因此,如果您在带有许多标注的 MKMapView
上滚动/缩放,iOS 必须一次性重新绘制所有标注,这需要时间。
OCMapView 会将指定范围内的多个标注组合起来,并且作为簇中单个 annotationView
来显示。因此,您的应用将不会有太多的视图,从而不会导致应用运行缓慢和卡顿。此外,您根本不需要自己处理标注!只需将所有标注添加到您的 OCMapView 中,它将为您完成一切。即使是带有 iOS 3.1.x 的 iPhone 3G 也能够处理成千上万的标注而不会出现卡顿!
OCMapView 会自动处理标注并将它们组合成 簇。只需将 OCMapView 文件夹添加到您的项目中,您就可以开始使用了。从 Interface Builder/Storyboard 中将您的 MapView
类从 MKMapView 更改为 OCMapView,或者像普通的 MKMapView
一样在代码中手动创建它。别忘了将 MapKit
和 CoreLocation
框架链接到您的项目中,并在您正在工作的视图控制器中导入 OCMapView.h
。
示例项目是用 Xcode 4.1 生成的,用于 iOS +4.0。
就像普通的MKMapView
一样使用它,添加您想显示的标注,并实现常用的MKMapViewDelegate
方法。
处理MKAnnotationView
的方式完全相同,因此您可以为您自己的标注和簇使用自定义视图。《viewForAnnotation》代理方法在生成聚合时将返回《OCAnnotation》对象。所以您可以为自定义视图提供
- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id <MKAnnotation>)annotation{
// if it's a cluster
if ([annotation isKindOfClass:[OCAnnotation class]]) {
// create your custom cluster annotationView here!
}
// If it's a single annotation
else if([annotation isKindOfClass:[Your_Annotation class]]){
// create your custom annotationView as regular here!
}
return Your_annotationView;
}
您可以通过设置特定属性来自定义簇的行为。了解更多信息,请查看示例项目或文档。
您可以像上面的截图所示一样对不同的标注组进行分组
在您的标注类中实现《OCGrouping》协议,设置其分组标记,并将你的《OCMapView》的《clusterByGroupTag》属性设置为《true》。查看示例项目以了解其如何工作。
MKMapView
一样简单,易于安装和使用。MKMapView
委托方法不变。MKAnnotation
一样,您可以根据需要自定义生成的簇的《MKAnnotationViews》。使用OCMapView的App
如果您使用OCMapView并想做出贡献,请联系我,添加您的应用程序到支持的列表!