it-swarm.com.ru

Как изменить цвет маркера Google Maps при выборе в Swift?

У меня есть контроллер представления с GMSMapView и я загрузил несколько маркеров на карту. Я могу изменить выбранный маркер с помощью mapView.selectedMarker = ..., но как мне изменить цвет выбранного маркера?

5
Derek Soike

Вы можете использовать GMSMarker.markerImage(with: <UIColor?>), чтобы сбросить значок маркера.

Документы: Справочник по классу GMSMarker для Google Maps iOS SDK

import GoogleMaps

// view controller
class MapViewController: UIViewController {

    // outlets
    @IBOutlet weak var mapView: GMSMapView!

    // view did load method
    override func viewDidLoad() {
        super.viewDidLoad()

        // set map view delegate
        mapView.delegate = self
    }
}

// extension for GMSMapViewDelegate
extension MapViewController: GMSMapViewDelegate {

    // tap map marker
    func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
        print("didTap marker \(marker.title)")

        // remove color from currently selected marker
        if let selectedMarker = mapView.selectedMarker {
            selectedMarker.icon = GMSMarker.markerImage(with: nil)
        }

        // select new marker and make green
        mapView.selectedMarker = marker
        marker.icon = GMSMarker.markerImage(with: UIColor.green)

        // tap event handled by delegate
        return true
    }
}
16
Derek Soike

Если вы используете RxSwift, вот элегантное решение с RxGoogleMaps

Observable.combineLatest(mapView.rx.selectedMarker,
                         mapView.rx.selectedMarker.skip(1))
    .subscribe(onNext: { (old, new) in
        old?.icon = GMSMarker.markerImage(with: nil)
        new?.icon = GMSMarker.markerImage(with: UIColor.red)
    })
    .disposed(by: disposeBag)
0
duan

Простой способ Swift 4

marker.icon = GMSMarker.markerImage(with: UIColor.green)
0
Shakeel Ahmed