我一直在使用适用于iOS sdk的gmaps并遇到以下问题:每当服务器端地图平移或缩放并完成操作(我使用Delegate idleAtCameraPosition即时贴)时,我都会比较地图中心的坐标,以标记图钉周围的地方。当位置离中心坐标足够近(1公里)时,将位置保存在“位置”对象数组中。
我的问题是,我一直无法避免将重复的对象添加到数组中,因此,每次平移地图但没有改变相机的位置时,屏幕上的现有标记都会重新添加到放置数组。我尝试使用此代码,但是它不起作用,并且数组可以无限增长,直到崩溃应用程序:
if(!arrayProp.contains(place)){
arrayProp.append(place)
}
但这是行不通的。
我还有另一个GMSMarkers数组,它从Places数组中获取数据。尝试使用以下代码来避免使用已经存在的Places对象在地图中重新创建标记:
for place in arrayProp {
let pinPlace = PlaceMarker(propied: place)//custom GMSMarker class
if(self.markerArray.contains(pinPlace) == false ) {
self.markerArray.append(pinPlace)
pinPlace.map = self.mapaGoogle
} else {
pinPlace.map = nil
}
}
任何帮助将不胜感激; 谢谢你
可能您Place
正在使用Equatable的默认定义,这不是您所期望的。您需要像这样的东西,contains()才能按预期工作:
struct Place: Equatable {
let there: Bool
}
func ==(lhs: Place, rhs: Place) -> Bool {
return lhs.there == rhs.there
}
检查Place的定义,如果使用只检查必要字段的默认值,则创建一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句