【问题标题】:Swift 4.2 : How to select/deselect multiple marker on google mapSwift 4.2:如何在谷歌地图上选择/取消选择多个标记
【发布时间】:2019-11-03 23:21:20
【问题描述】:

我正在使用 iOS 中的 swift 在谷歌地图上实现多个标记。我已成功在地图上放置了所有标记,并且可以使用“didTap marker”方法选择标记。但我无法取消选择它。当用户选择一个标记时,应取消选择其余标记。

extension MapVC {
    // Mark:- Create Marker and set position
    fileprivate func setMarkerOnMap() {
        if self.markerArray.count != 0 {
            for i in 0...self.markerArray.count - 1 {
                let data = self.markerArray[i]
                guard let lat = data.lat else {
                    return
                }
                guard let lon = data.long else {
                    return
                }           
                let camera: GMSCameraPosition = GMSCameraPosition.camera(withLatitude: Double(lat)!, longitude: Double(lon)!, zoom: zoomLevel)
                showMarker(position: camera.target, index: i)
            }
        }
    }

      // Mark:- Show marker on map
         fileprivate func showMarker(position: CLLocationCoordinate2D, inde x: Int) {
            let marker = GMSMarker()
             marker.position = position
             marker.icon = UIImage(named: "marker-unselected-icon")
             marker.accessibilityLabel = "\(index)" // get index from array when click on each marker to identify
             marker.map = self.mapView
         }
     }
     //MARK - Map
     extension MapVC: GMSMapViewDelegate {
         // MARK:- DidTap marker 
         func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker)->      Bool {
             if let markerLbl = marker.accessibilityLabel{
                 index = Int(markerLbl)
             }
            if marker != self.userMarker{
               marker.icon = UIImage(named: "marker-selected-icon")
               self.restaurantDetailView.isHidden = false
                self.distanceView.isHidden = true
               self.infoView.isHidden = true
           }
              var isReturn = true
             mapView.selectedMarker = nil

        if self.markerArray.count != 0 {
            for i in 0...markerArray.count - 1 {
                if i == index {
                    let storeInfo = markerArray[i]
                    storeInfo.isSelected = !storeInfo.isSelected
                    self.destinationLat = Double(storeInfo.lat!)!
                    self.destinationLng =  Double(storeInfo.long!)!
                     marker.icon = UIImage(named: "marker-selected-icon")
                    markerArray[i] = storeInfo
                } else {
                    marker.icon = UIImage(named: "marker-unselected-icon")
                    let storeInfo = markerArray[i]
                    storeInfo.isSelected = false
                    markerArray[i] = storeInfo
                }
            }
        } else {
            mapView.selectedMarker = nil
            isReturn = true
            return isReturn
        }
        return isReturn
    }
}

我正在使用点按方法更改选定的标记图像,但不幸的是,它不起作用。我不知道我做错了什么。提前致谢。

【问题讨论】:

    标签: swift google-maps google-maps-markers


    【解决方案1】:

    当用户想要选择一个标记并想要取消选择所有其他标记时,下面的代码会很有用。

    取消选择地图上的所有标记:

    for (marker in self.markerArray) {
      self.mapview.selectedMarker = nil
    }

    在地图上选择标记:

    self.mapView.selectedMarker = self.userMarker

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 2014-06-12
      • 2016-08-18
      相关资源
      最近更新 更多