gpt4 book ai didi

swift - 如何检查注释是否聚集(MKMarkerAnnotationView 和 Cluster)

转载 作者:搜寻专家 更新时间:2023-10-31 22:04:50 24 4
gpt4 key购买 nike

我正在尝试使用添加到 ios11 中的 map View 的新功能。

我正在将我所有的 MKAnnotationView 与圆形碰撞进行聚类,但我必须在注释变为聚类时实时检查。

我不知道该怎么做。

编辑(2018 年 4 月 1 日):

更多信息:当我选择注释时,我会在调用 didSelect 方法时添加自定义 CallOutView,并在调用 didDeselect 方法时删除 CallOut。

问题是当注释被选中并变成集群时,当您放大时注释仍处于选中状态但处于“正常”状态。

当我选择的注释像 didDeselect 方法一样聚集时,我想删除它的 CallOut。

下面的截图说明了我的问题:

1 - Annotation Selected

2 - Annotation Clustered

3 - Annotation Zoom In after cluster

我认为这只是一个理解问题。

任何帮助将不胜感激。提前谢谢你

最佳答案

在iOS 11中,Apple还在MKMapViewDelegate中引入了一个新的回调:

func mapView(_ mapView: MKMapView, clusterAnnotationForMemberAnnotations memberAnnotations: [MKAnnotation]) -> MKClusterAnnotation

在注释成为集群之前,将调用此函数为 memberAnnotations 请求一个 MKClusterAnnotation。所以名为memberAnnotations的第二个参数表示要聚类的注释。

编辑(2018 年 4 月 1 日):

聚类标注有两个关键步骤:

首先,在注释成为集群之前,MapKit 调用 mapView:clusterAnnotationForMemberAnnotations: 函数来为 memberAnnotations 请求 MKClusterAnnotation。

其次,MapKit 将 MKClusterAnnotation 添加到 MKMapView,并调用 mapView:viewForAnnotation: 函数生成 MKAnnotationView。

因此您可以在两个步骤中的任何一个中取消选择注释,如下所示:

var selectedAnnotation: MKAnnotation?//选中的注解

 func mapView(_ mapView: MKMapView, clusterAnnotationForMemberAnnotations memberAnnotations: [MKAnnotation]) -> MKClusterAnnotation {
for annotation in memberAnnotations {
if annotation === selectedAnnotation {
mapView.deselectAnnotation(selectedAnnotation, animated: false)//Or remove the callout
}
}

//...
}

或者:

 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if let clusterAnnotation = annotation as? MKClusterAnnotation {
for annotation in clusterAnnotation.memberAnnotations {
if annotation === selectedAnnotation {
mapView.deselectAnnotation(selectedAnnotation, animated: false)//Or remove the callout
}
}
}

//...
}

关于swift - 如何检查注释是否聚集(MKMarkerAnnotationView 和 Cluster),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com