我搜索了很多但是没有得到任何关于Swift 3上下文问题的确切解决方案。我需要在我的应用程序中绘制多个标记(GMSMarker类型)。我的代码如下。
var markerDict: [Int: GMSMarker] = [:]
var custlatt = [13.093781,13.034893,13.034893]
var custlong = [77.576284,77.596372, 77.596372]
override func viewDidLoad() {
super.viewDidLoad()
for i in 0...2{
let camera = GMSCameraPosition.camera(withLatitude:custlatt[i], longitude: custlong[i], zoom: 10.0)
let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
view = mapView
markerDict[i] = GMSMarker()
markerDict[i]?.position = CLLocationCoordinate2D(latitude:custlatt[i], longitude: custlong[i])
markerDict[i]?.title = "NAGAVARA"
markerDict[i]?.snippet = "Bengaluru"
markerDict[i]?.map = mapView
}
即使我使用标记数组,也只标记了一个位置(custlatt的最后一个值,custlong数组)。任何人都可以建议我哪里出错了吗?或者还有其他实施方法吗?
答案 0 :(得分:0)
你在哪里
markerDict[0] = GMSMarker()
不应该
markerDict[i] = GMSMarker()
为此以及接下来的4行?
我想你只看到最后一个标记的原因是之前的标记被垃圾收集,因为你在循环的下一次迭代中覆盖它们的唯一引用。
答案 1 :(得分:0)
在for循环之外实例化GmsMapview解决你的问题!!!
class MapVC:UIViewController{
var markerDict: [String: GMSMarker] = [:]
var custlatt = [13.093781,13.034893,13.034893]
var custlong = [77.576284,77.596372, 77.596372]
var mapView:GMSMapView!
override func viewDidLoad() {
super.viewDidLoad()
mapView = GMSMapView()
mapView.frame = self.view.frame
setupViews()
for (i, element) in (["first","second","third"]).enumerated(){
let camera = GMSCameraPosition.camera(withLatitude:custlatt[i], longitude: custlong[i], zoom: 10.0)
mapView.camera = camera
markerDict[element] = GMSMarker()
markerDict[element]?.position = CLLocationCoordinate2D(latitude:custlatt[i], longitude: custlong[i])
markerDict[element]?.title = element
markerDict[element]?.snippet = element
markerDict[element]?.map = mapView
}
}