Tag: 自定义注释

Google标记群集

Google iOS库提供了基于网格的聚类技术,该技术可将地图划分为正方形并将标记(注释)分​​组到每个正方形网格中。它提供了摘要标记,可让您大致了解缩放级别下的“下方”。 在这里,我参考Google官方API编写此博客。 在本博客中,将讨论一个演示,该演示具有Google地图集群的示例实现。 逐步会看到并学习实现。 第1步:最初,您应该在项目文件夹中包含pod(终端命令:pod init)文件,然后在同一文件中添加Google-Maps-iOS-Utils Pod。 安装Pod之后,打开生成的.xcworkspace扩展文件。 步骤2:以这种方式初始打开ViewController并覆盖方法 私人var mapView:GMSMapView! 私有var clusterManager:GMUClusterManager! 覆盖func loadView(){ let camera = GMSCameraPosition.camera(withLatitude:37.4220,经度:-122.0841,缩放:17) mapView = GMSMapView.map(withFrame:CGRect.zero,camera:camera) self.view = mapView } 步骤3:在viewDidLoad方法内部添加代码,如下所示 覆盖func viewDidLoad(){ super.viewDidLoad() //使用默认的图标生成器和渲染器设置集群管理器。 让iconGenerator = GMUDefaultClusterIconGenerator() let算法= GMUNonHierarchicalDistanceBasedAlgorithm() 让渲染器= GMUDefaultClusterRenderer(mapView:mapView,clusterIconGenerator:iconGenerator) clusterManager = GMUClusterManager(地图:mapView,算法:算法,渲染器:渲染器) //生成随机项并将其添加到集群管理器。 generateClusterItems() clusterManager.cluster() //注册self来侦听GMUClusterManagerDelegate和GMSMapViewDelegate事件。 clusterManager.setDelegate(self,mapDelegate:self) } 私人功能generateClusterItems(){ 让范围= 0.2 用于1 … kClusterItemCount中的索引{ 令lat […]

地图视图最初不会显示所有注释

您是否知道创建地图视图并在其上放置注释(图钉)?它不会显示所有图钉。 首先,您想知道缩放是否存在问题。 但是没有问题。 iOS就是这样管理的。 它希望避免具有许多彼此重叠的图钉的地图视图。 因此,它对引脚进行了优先排序,并显示了更高优先级的引脚。 然后,当您放大屏幕时,其他针脚将出现。 但是,您可以根据需要更改此默认设置以查看所有引脚。 甚至更好的主意是拥有一个群集地图,该地图可以显示每个针脚隐藏了多少针脚。 我将首先进行设置,即在屏幕上显示所有引脚。 MKA注解: 用于将您的内容与特定地图位置相关联的界面。 采用此协议的对象管理要在地图表面上显示的数据。 它不提供地图显示的视觉表示。 相反,您的地图视图的委托提供了 MKAnnotationView 显示注释内容所需的对象。 这意味着任何具有坐标的对象(MKAnnotation协议的方法)都可以传递给addAnnotation(地图视图对象的方法)。 所以我们有别针,但是他们的看法呢。 如苹果文档中所述,地图视图的委托提供了 MKAnnotationView 宾语。 因此,如果要更改注释视图,则应定制一个。 我们可以这样做(因为此方法会在要渲染该地图视图时通知并返回注解的视图):func mapView(_ mapView:MKMapView,viewFor注解:MKAnnotation)-> MKAnnotationView? 这是MKMapViewDelegate的方法 MKAnnotationView类的属性之一是displayPriority。 默认情况下,此属性设置为highPriority,这意味着仅显示更高优先级的注释。 因此,如果要查看所有注释,只需将其设置为.required。 在下面的示例中,我展示了一个示例:(我创建了一个示例位置,并将其显示在地图视图中,在这里,我只是放置了返回批注视图的函数,如果您想要该项目,则可以从下面的链接中获取它) 关于创建MKMarkerAnnotationView的注意事项是MKAnnotationView的子类。 要创建视图,最好使用dequeueReusableAnnotationView。 返回通过其标识符定位的可重用注释视图。 出于性能原因,通常应重用 MKAnnotationView 地图视图中的对象。 随着注释视图移出屏幕,地图视图将它们移至内部管理的重用队列。 随着新注释在屏幕上移动,并提示您的代码提供相应的注释视图,您应始终尝试在创建新视图之前使现有视图出队。 在对性能至关重要的操作(如滚动)中,出队可节省时间和内存。 好的,完成了。 您可以在地图中包含所有注释。 但是仍然可以重构代码以使其更整洁。 您可以删除所有用于创建注释视图的方法,并使用地图视图的register方法。 在使任何视图出队之前,请调用register方法告诉地图视图如何创建新的注释视图。 您只需要在视图控制器外部创建注释视图类,然后将其显示优先级更改为.required。 amirhossein828 /地图集群 通过在GitHub上创建一个帐户为Map-Clustering开发做出贡献。 github.com