diff --git a/Sources/MapConductorForMapKit/MapKitMapView.swift b/Sources/MapConductorForMapKit/MapKitMapView.swift index 2461e97..9b73bbe 100644 --- a/Sources/MapConductorForMapKit/MapKitMapView.swift +++ b/Sources/MapConductorForMapKit/MapKitMapView.swift @@ -286,6 +286,7 @@ private struct MapKitMapViewRepresentable: UIViewRepresentable { controller.registerOverlayController(polygonController) controller.registerOverlayController(groundImageController) controller.registerOverlayController(rasterLayerController) + controller.clearOverlaysHandler = { [weak self] in await self?.clearOverlays() } let overlayScope = MapOverlayScope() self.overlayScope = overlayScope @@ -316,6 +317,17 @@ private struct MapKitMapViewRepresentable: UIViewRepresentable { } } + /// 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() + } + func unbind() { // 登録した capability を取り下げる。レジストリの持ち主は state で、ビューより長生きするため、 // ここで外さないと破棄済みのコントローラを掴んだまま残る。 diff --git a/Sources/MapConductorForMapKit/controller/MapKitViewController.swift b/Sources/MapConductorForMapKit/controller/MapKitViewController.swift index 02bdbea..c5e0f86 100644 --- a/Sources/MapConductorForMapKit/controller/MapKitViewController.swift +++ b/Sources/MapConductorForMapKit/controller/MapKitViewController.swift @@ -64,10 +64,12 @@ final class MapKitViewController: MapViewControllerProtocol { cancelCameraAnimation() } + /// ``clearOverlays()`` の中身。オーバーレイのコントローラはホストが持っているので、 + /// ホストが生成時に設定する(android-sdk と同じく、各コントローラの `clear()` を呼ぶ)。 + var clearOverlaysHandler: (@MainActor () async -> Void)? + func clearOverlays() async { - guard let mapView = mapView else { return } - mapView.removeAnnotations(mapView.annotations) - mapView.removeOverlays(mapView.overlays) + await clearOverlaysHandler?() } func setCameraMoveStartListener(listener: OnCameraMoveHandler?) {