Tag: 集群

在iOS 11上使用MapKit进行集群:第2部分

在第一部分中,我们研究了MapKit实现注释集群(iOS 11的一项新功能)所涉及的一些高级概念。正如该帖子的结论所指出的,我们还有许多工作要做,以使我们的简单应用程序更加实用,并使其代码更具可读性。 在第二部分中,我们将做到这一点! 首先,快速回顾一下。 您可能还记得,在应用程序中建立注释集群并运行的过程非常简单: 在地图上的狭窄区域添加多个注释。 为MapKit提供每个注释的MKAnnotationView实例, MKAnnotationView注意适当地设置其clusteringIdentifier 。 为MapKit提供其他MKAnnotationView实例, MKAnnotationView用于MKClusterAnnotation类型,这些实例在运行时自动生成。 享受您整洁有序的地图! 大部分工作都是在单个MKMapViewDelegate方法( viewFor )中完成的,并且所得的项目虽然简单易用,但可能会更强大。 因此,让我们进行一些重构! 我们将从更新MapItem ( MKAnnotation MKAnnotation的数据类型)开始。 在第一部分中, MapItem非常简单:它具有CLLocationCoordinate2D类型的单个属性,这是MKAnnotation要求的MKAnnotation 。 在我们更新的应用程序中,我们希望地图上的颜色更加多样化,因此我们将扩展MapItem以包含ItemType ,这将确定地图上注释的颜色: 如您所见,我们的集群现在可以显示有关它们包含的数据的更多信息,并且导航地图要直观得多。 繁荣! 🎉 希望您已经学到了一些有关MapKit的功能的有用技巧,这些技巧在iOS上的注释集群方面比本迷你系列的第1部分和第2部分更重要。 我们已经从一个显示该系统工作原理的超简单示例,变成了一个具有生产就绪代码的更复杂示例(借助Swift🤓的强大功能使其变得优雅)。 谢谢阅读! 如果所有这些地图都让您感到有些迷茫,请在下面发表评论,在Twitter @worthbak上打我,或在Github上查看完整的项目。 否则,编码愉快!

在iOS 11上使用MapKit进行群集

自WWDC 2017以来,MapKit中的本机注释聚类是一项广受关注的功能。 在iOS 11之前,要在您的应用程序中集群化并运行有点费力:您必须从几个提供该功能的第三方库中进行选择,为应用程序添加另一个依赖项,并进行大量工作以使现有的与他们的系统兼容的体系结构。 所有这些只是为了使您的地图更易于阅读! 幸运的是,Apple的本机解决方案既非常容易添加到您的应用中,又与大多数MapKit实现中常见的典型模式自然契合。 让我们来看看。 对于以前在iOS上使用地图功能不多的用户,在屏幕上获取注释非常简单。 在下面的图形中,您将看到一个简单的类层次结构: MKAnnotation , MKMapView和MKAnnotationView位于它们之间。 MKAnnotation是一种具有一个必需属性的协议:坐标( CLLCoordinate2D )。 可以将符合此协议的对象添加到由MapKit中的MKMapView表示的地图中。 添加到地图的实际视图是MKAnnotationView (或其子类),它将被放置在地图上注释对象的坐标处。 很简单! 因此,一旦将一堆这些注释添加到地图上,我们如何将它们聚类? 同样非常简单:您可以利用MKAnnotationView上新的clusteringIdentifier属性。 每当地图的视口发生变化时,系统可以将共享同一clusteringIdentifier任意数量的地图上批注组合到一个群集中。 让我们深入研究一些代码,以了解实际情况。 繁荣! lines几行额外的代码,我们为我们的应用程序添加了一个很棒的新功能。 当然,我们可以进行一些改进: 如何列出每个集群中包含的项目数? 也许有关每个集群中数据的一些高级信息? 而且,woof,当前的代码有点混乱。 我们如何清理它,并使所有内容变得更加快速? 我们将在下周的第二部分中介绍这些改进! 同时,在GitHub上查看工作项目project