expo-gaode-map 2.2.40-next.0 → 2.2.41-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ios/ExpoGaodeMapView.swift +30 -2
- package/package.json +1 -1
|
@@ -114,6 +114,8 @@ class ExpoGaodeMapView: ExpoView, MAMapViewDelegate, UIGestureRecognizerDelegate
|
|
|
114
114
|
private var overlayContainer: UIView!
|
|
115
115
|
/// 显式跟踪所有覆盖物视图(新架构下 subviews 可能不可靠)
|
|
116
116
|
private var overlayViews: [UIView] = []
|
|
117
|
+
/// MarkerView 短暂 detach 时延迟注销,避免 annotation 暂时找不到自定义 view 而回退默认样式
|
|
118
|
+
private var pendingMarkerOverlayUnregisterTasks: [ObjectIdentifier: DispatchWorkItem] = [:]
|
|
117
119
|
|
|
118
120
|
// MARK: - 事件节流控制
|
|
119
121
|
|
|
@@ -251,6 +253,8 @@ class ExpoGaodeMapView: ExpoView, MAMapViewDelegate, UIGestureRecognizerDelegate
|
|
|
251
253
|
}
|
|
252
254
|
|
|
253
255
|
private func registerOverlayView(_ view: UIView) {
|
|
256
|
+
cancelPendingMarkerOverlayUnregister(for: view)
|
|
257
|
+
|
|
254
258
|
guard !overlayViews.contains(where: { $0 === view }) else {
|
|
255
259
|
return
|
|
256
260
|
}
|
|
@@ -258,9 +262,31 @@ class ExpoGaodeMapView: ExpoView, MAMapViewDelegate, UIGestureRecognizerDelegate
|
|
|
258
262
|
}
|
|
259
263
|
|
|
260
264
|
private func unregisterOverlayView(_ view: UIView) {
|
|
265
|
+
cancelPendingMarkerOverlayUnregister(for: view)
|
|
261
266
|
overlayViews.removeAll { $0 === view }
|
|
262
267
|
}
|
|
263
268
|
|
|
269
|
+
private func scheduleMarkerOverlayUnregister(_ markerView: MarkerView) {
|
|
270
|
+
cancelPendingMarkerOverlayUnregister(for: markerView)
|
|
271
|
+
|
|
272
|
+
let identifier = ObjectIdentifier(markerView)
|
|
273
|
+
let task = DispatchWorkItem { [weak self, weak markerView] in
|
|
274
|
+
guard let self = self, let markerView = markerView else { return }
|
|
275
|
+
self.pendingMarkerOverlayUnregisterTasks[identifier] = nil
|
|
276
|
+
guard markerView.superview == nil else { return }
|
|
277
|
+
self.unregisterOverlayView(markerView)
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
pendingMarkerOverlayUnregisterTasks[identifier] = task
|
|
281
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.35, execute: task)
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
private func cancelPendingMarkerOverlayUnregister(for view: UIView) {
|
|
285
|
+
let identifier = ObjectIdentifier(view)
|
|
286
|
+
pendingMarkerOverlayUnregisterTasks[identifier]?.cancel()
|
|
287
|
+
pendingMarkerOverlayUnregisterTasks[identifier] = nil
|
|
288
|
+
}
|
|
289
|
+
|
|
264
290
|
private func prepareOverlayViewForHosting(_ view: UIView) {
|
|
265
291
|
guard !(view is MarkerView) else {
|
|
266
292
|
return
|
|
@@ -336,8 +362,8 @@ class ExpoGaodeMapView: ExpoView, MAMapViewDelegate, UIGestureRecognizerDelegate
|
|
|
336
362
|
// 🔑 处理所有覆盖物 - 从跟踪数组中移除并确保 native 对象也从地图移除
|
|
337
363
|
// 🔑 关键修复:先从数组移除,再调用 super,防止 super 触发的事件回调中引用已卸载的视图
|
|
338
364
|
if let markerView = subview as? MarkerView {
|
|
339
|
-
|
|
340
|
-
// MarkerView
|
|
365
|
+
scheduleMarkerOverlayUnregister(markerView)
|
|
366
|
+
// MarkerView 内部也会延迟确认 annotation 移除,避免 transient detach 闪烁。
|
|
341
367
|
} else if let circleView = subview as? CircleView {
|
|
342
368
|
unregisterOverlayView(circleView)
|
|
343
369
|
if let mapView, let circle = circleView.circle {
|
|
@@ -898,6 +924,8 @@ class ExpoGaodeMapView: ExpoView, MAMapViewDelegate, UIGestureRecognizerDelegate
|
|
|
898
924
|
appleMapView?.removeOverlays(appleMapView?.overlays ?? [])
|
|
899
925
|
|
|
900
926
|
// 清空覆盖物数组
|
|
927
|
+
pendingMarkerOverlayUnregisterTasks.values.forEach { $0.cancel() }
|
|
928
|
+
pendingMarkerOverlayUnregisterTasks.removeAll()
|
|
901
929
|
overlayViews.removeAll()
|
|
902
930
|
|
|
903
931
|
// 移除所有子视图
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-gaode-map",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.41-next.0",
|
|
4
4
|
"description": "Expo Modules AMap (Gaode Map) stack for Expo/React Native: Config Plugin, New Architecture support, maps, location, search, offline maps, and react-native-amap3d migration guidance.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|