在iOS 11上使用MapKit进行群集

自WWDC 2017以来,MapKit中的本机注释聚类是一项广受关注的功能。 在iOS 11之前,要在您的应用程序中集群化并运行有点费力:您必须从几个提供该功能的第三方库中进行选择,为应用程序添加另一个依赖项,并进行大量工作以使现有的与他们的系统兼容的体系结构。 所有这些只是为了使您的地图更易于阅读!

幸运的是,Apple的本机解决方案既非常容易添加到您的应用中,又与大多数MapKit实现中常见的典型模式自然契合。 让我们来看看。

对于以前在iOS上使用地图功能不多的用户,在屏幕上获取注释非常简单。 在下面的图形中,您将看到一个简单的类层次结构: MKAnnotationMKMapViewMKAnnotationView位于它们之间。

MKAnnotation是一种具有一个必需属性的协议:坐标( CLLCoordinate2D )。 可以将符合此协议的对象添加到由MapKit中的MKMapView表示的地图中。 添加到地图的实际视图是MKAnnotationView (或其子类),它将被放置在地图上注释对象的坐标处。 很简单!

因此,一旦将一堆这些注释添加到地图上,我们如何将它们聚类? 同样非常简单:您可以利用MKAnnotationView上新的clusteringIdentifier属性。 每当地图的视口发生变化时,系统可以将共享同一clusteringIdentifier任意数量的地图上批注组合到一个群集中。 让我们深入研究一些代码,以了解实际情况。

繁荣! lines几行额外的代码,我们为我们的应用程序添加了一个很棒的新功能。 当然,我们可以进行一些改进:

  • 如何列出每个集群中包含的项目数?
  • 也许有关每个集群中数据的一些高级信息?
  • 而且,woof,当前的代码有点混乱。 我们如何清理它,并使所有内容变得更加快速?

我们将在下周的第二部分中介绍这些改进!

同时,在GitHub上查看工作项目project