【发布时间】:2018-04-11 04:52:46
【问题描述】:
我在 GoogleMap 上有大约 4000 个标记,但我没有使用聚类。所以,目前我在地图上显示/隐藏标记的操作如下。
marker.map = nil
marker.map = mapView
在某些情况下,我需要过滤掉一些标记并使它们可见,否则应该隐藏它们。所以我可以通过代码来实现它,但需要花费时间。
markers.forEach { (marker) in
if !arrDeviceID.contains(marker.deviceID ?? "") {
marker.map = nil
} else {
marker.map = self.googleMapView
}
}
Android 中有一个属性Visibility,它运行完美且快速。但是在 iOS 中没有这样的属性。
那么我可以做些什么来提高性能。
【问题讨论】:
-
您可以拥有一个标记字典,其中键是 Id,值是标记,而不是标记数组并用 o(n^2) 枚举它。您可以使用 o(n) 访问每个标记。
-
marker.opacity = 0隐藏标记而不删除它。通过marker.map = nil,您正在从地图中删除叠加层并将其添加回来,这需要时间。 -
你的复杂度是 o(n2)。您可以使用标记字典并迭代 arrDeviceId。
-
@TheTiger
marker.opacity = 0将隐藏标记,但我猜它仍会收到点击。我会继续尝试。 -
@Mina 看起来很有希望将数组替换为字典。
标签: ios swift google-maps google-maps-sdk-ios