diff --git a/Sources/MapConductorForGoogleMaps/GoogleMapHost.swift b/Sources/MapConductorForGoogleMaps/GoogleMapHost.swift index 1deef41..ad8eaa3 100644 --- a/Sources/MapConductorForGoogleMaps/GoogleMapHost.swift +++ b/Sources/MapConductorForGoogleMaps/GoogleMapHost.swift @@ -89,6 +89,7 @@ public final class GoogleMapHost: MapViewCoordinatorBase, GM controller.registerOverlayController(polygonController) controller.registerOverlayController(groundImageController) controller.registerOverlayController(rasterController) + controller.clearOverlaysHandler = { [weak self] in await self?.clearOverlays() } let overlayScope = MapOverlayScope() self.overlayScope = overlayScope @@ -128,6 +129,17 @@ public final class GoogleMapHost: MapViewCoordinatorBase, GM ) } + /// android-sdk の `clearOverlays()` と同じく、各オーバーレイのコントローラを空にする。 + /// `controller.clearOverlaysHandler` から呼ばれる。 + func clearOverlays() async { + await markerController?.clear() + await polylineController?.clear() + await polygonController?.clear() + await groundImageController?.clear() + await circleController?.clear() + await rasterController?.clear() + } + public func unbind() { // 登録した capability を取り下げる。レジストリの持ち主は state で、ビューより長生きするため、 // ここで外さないと破棄済みのコントローラを掴んだまま残る。 diff --git a/Sources/MapConductorForGoogleMaps/controller/GoogleMapViewController.swift b/Sources/MapConductorForGoogleMaps/controller/GoogleMapViewController.swift index 0136de9..f932fd1 100644 --- a/Sources/MapConductorForGoogleMaps/controller/GoogleMapViewController.swift +++ b/Sources/MapConductorForGoogleMaps/controller/GoogleMapViewController.swift @@ -29,8 +29,12 @@ final class GoogleMapViewController: MapViewControllerProtocol { self.holder = AnyMapViewHolder(typedHolder) } + /// ``clearOverlays()`` の中身。オーバーレイのコントローラはホストが持っているので、 + /// ホストが生成時に設定する(android-sdk と同じく、各コントローラの `clear()` を呼ぶ)。 + var clearOverlaysHandler: (@MainActor () async -> Void)? + func clearOverlays() async { - await mapView?.clear() + await clearOverlaysHandler?() } func setCameraMoveStartListener(listener: OnCameraMoveHandler?) {