Skip to content

Commit 9508db2

Browse files
committed
fix(ios): correct marker build & update threading
1 parent 4cd4c82 commit 9508db2

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

ios/MapMarkerBuilder.swift

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ final class MapMarkerBuilder {
5252

5353
if !prev.markerStyleEquals(next) {
5454
buildIconAsync(next) { img in
55-
m.tracksViewChanges = true
5655
m.icon = img
5756

5857
if !prev.anchorEquals(next) {
@@ -69,9 +68,9 @@ final class MapMarkerBuilder {
6968
)
7069
}
7170

72-
onMainAsync { [weak m] in
73-
try? await Task.sleep(nanoseconds: 250_000_000)
74-
m?.tracksViewChanges = false
71+
m.tracksViewChanges = true
72+
DispatchQueue.main.async {
73+
m.tracksViewChanges = false
7574
}
7675
}
7776
} else {
@@ -102,11 +101,10 @@ final class MapMarkerBuilder {
102101
m.snippet = next.snippet
103102
}
104103

105-
if(tracksInfoWindowChanges) {
104+
if tracksInfoWindowChanges {
106105
m.tracksInfoWindowChanges = true
107-
onMainAsync { [weak m] in
108-
try? await Task.sleep(nanoseconds: 250_000_000)
109-
m?.tracksInfoWindowChanges = false
106+
DispatchQueue.main.async {
107+
m.tracksInfoWindowChanges = false
110108
}
111109
}
112110

@@ -140,7 +138,6 @@ final class MapMarkerBuilder {
140138
}
141139
}
142140

143-
@MainActor
144141
func buildIconAsync(
145142
_ m: RNMarker,
146143
onReady: @escaping (UIImage?) -> Void
@@ -158,11 +155,14 @@ final class MapMarkerBuilder {
158155
return
159156
}
160157

158+
let scale = UIScreen.main.scale
159+
161160
let task = Task(priority: .userInitiated) { [weak self] in
162161
guard let self else { return }
163-
defer { self.tasks.removeValue(forKey: m.id) }
162+
defer {
163+
Task { @MainActor in self.tasks.removeValue(forKey: m.id) }
164+
}
164165

165-
let scale = UIScreen.main.scale
166166
let img = await self.renderUIImage(m, scale)
167167
guard let img, !Task.isCancelled else { return }
168168

@@ -233,7 +233,6 @@ final class MapMarkerBuilder {
233233
return imageView
234234
}
235235

236-
@MainActor
237236
private func renderUIImage(_ m: RNMarker, _ scale: CGFloat) async -> UIImage? {
238237
guard let iconSvg = m.iconSvg,
239238
let data = iconSvg.svgString.data(using: .utf8)

0 commit comments

Comments
 (0)