【Swift】GoogleMapでマーカーがチカチカ点滅・明滅する原因と対処法【Xcode/iOS】

GoogleMapにマーカー(GMSMarker)を複数表示すると、まれに以下のようにチカチカ明滅・点滅する事象に遭遇しました。

今回はその原因と対処法についてまとめています。
チカチカする原因
結論から言うと、同じ緯度・経度上に色または画像の違うマーカーを複数置くと、チカチカしてるように見えてしまいます。
チカチカするサンプルコード
///
/// 色の違うマーカーを2つ作り、マップ上の同一地点に表示する
func addMarkerOnMap(map: GMSMapView, lat: Double, lng: Double){
let marker1 = createMarker(color: .gray)
marker1.position = CLLocationCoordinate2D(latitude: lat, longitude: lng)
marker1.map = map
let marker2 = createMarker()
marker2.position = CLLocationCoordinate2D(latitude: lat, longitude: lng)
marker2.map = map
}
/// 色付きのマーカーを作成するメソッド
private func createMarker(color: UIColor = .mainColor) -> GMSMarker{
let marker = GMSMarker()
let size = CGSize(width: 40, height: 40)
// 「marker」と言う名前の画像があるこ
let markerImage = UIImage(named: "marker")?.resizeScaleImage(scaledToSize: size).withRenderingMode(.alwaysTemplate)
let markerImageView = UIImageView(image: markerImage)
markerImageView.tintColor = color
marker.iconView = markerImageView
return marker
}
addMarkerOnMapメソッドで、同じ地点に色の違うマーカーを表示しています。
この結果、上で示したようにチカチカしてしまいました。
対処方法
GMSMapMarkarクラスの zIndex プロパティ を指定して、マーカーの重なり順を指定します。
zIndex に大きい値を指定したマーカーが、他のマーカーよりも前に表示されるようになります。
改良後のコード
///
/// 色の違うマーカーを2つ作り、マップ上の同一地点に表示する
func addMarkerOnMap(map: GMSMapView, lat: Double, lng: Double){
let marker1 = createMarker(color: .gray)
marker1.position = CLLocationCoordinate2D(latitude: lat, longitude: lng)
marker1.map = map
marker1.zIndex = 0
let marker2 = createMarker()
marker2.position = CLLocationCoordinate2D(latitude: lat, longitude: lng)
marker2.map = map
// marker2をmarker1の上に表示している
marker2.zIndex = 1
}
上のコードでは、marker1(グレーのマーカー)のzIndexを0に、marker2のzIndexを1にすることで、グレーのマーカーが一番後ろに表示されるようにしています。
この結果、チカチカするような動作は解消することができました。










