diff --git a/Sources/MapConductorForHERE/HereMapHost.swift b/Sources/MapConductorForHERE/HereMapHost.swift index 0921e6b..a790edd 100644 --- a/Sources/MapConductorForHERE/HereMapHost.swift +++ b/Sources/MapConductorForHERE/HereMapHost.swift @@ -98,6 +98,7 @@ public final class HereMapHost: MapViewCoordinatorBase, Marker controller.registerOverlayController(polygonController) controller.registerOverlayController(groundImageController) controller.registerOverlayController(rasterLayerController) + controller.clearOverlaysHandler = { [weak self] in await self?.clearOverlays() } let overlayScope = MapOverlayScope() self.overlayScope = overlayScope @@ -447,6 +448,17 @@ public final class HereMapHost: MapViewCoordinatorBase, Marker mapView?.pause() } + /// android-sdk の `clearOverlays()` と同じく、各オーバーレイのコントローラを空にする。 + /// `controller.clearOverlaysHandler` から呼ばれる。 + func clearOverlays() async { + await markerController?.clear() + await polylineController?.clear() + await polygonController?.clear() + await groundImageController?.clear() + await circleController?.clear() + await rasterLayerController?.clear() + } + public func unbind() { // 登録した capability を取り下げる。レジストリの持ち主は state で、ビューより長生きするため、 // ここで外さないと破棄済みのコントローラを掴んだまま残る。 diff --git a/Sources/MapConductorForHERE/controller/HereMapViewController.swift b/Sources/MapConductorForHERE/controller/HereMapViewController.swift index b6b87b5..c10557b 100644 --- a/Sources/MapConductorForHERE/controller/HereMapViewController.swift +++ b/Sources/MapConductorForHERE/controller/HereMapViewController.swift @@ -60,8 +60,12 @@ final class HereMapViewController: NSObject, cameraMoveEndTask?.cancel() } + /// ``clearOverlays()`` の中身。オーバーレイのコントローラはホストが持っているので、 + /// ホストが生成時に設定する(android-sdk と同じく、各コントローラの `clear()` を呼ぶ)。 + var clearOverlaysHandler: (@MainActor () async -> Void)? + func clearOverlays() async { - hereHolder.mapView.mapScene.removeAllMapItems() + await clearOverlaysHandler?() } func setCameraMoveStartListener(listener: OnCameraMoveHandler?) {