@@ -159,7 +159,7 @@ final class MapMarkerBuilder {
159159 _ m: RNMarker ,
160160 onReady: @escaping ( UIImage ? ) -> Void
161161 ) {
162- tasks [ m. id] ? . cancel ( )
162+ cancelIconTask ( m. id)
163163
164164 guard let iconSvg = m. iconSvg else {
165165 onReady ( nil )
@@ -176,16 +176,14 @@ final class MapMarkerBuilder {
176176
177177 let task = Task ( priority: . userInitiated) { [ weak self] in
178178 guard let self else { return }
179- defer {
180- Task { @MainActor in self . tasks. removeValue ( forKey: m. id) }
181- }
182179
183180 let renderResult = self . renderUIImage ( iconSvg, m. id, scale)
184181 guard !Task. isCancelled else { return }
185182
186183 guard let renderResult = renderResult else {
187184 await MainActor . run {
188185 guard !Task. isCancelled else { return }
186+ self . tasks. removeValue ( forKey: m. id)
189187 onReady ( self . createFallbackUIImage ( ) )
190188 }
191189 return
@@ -197,13 +195,18 @@ final class MapMarkerBuilder {
197195
198196 await MainActor . run {
199197 guard !Task. isCancelled else { return }
198+ self . tasks. removeValue ( forKey: m. id)
200199 onReady ( renderResult. image)
201200 }
202201 }
203202
204203 tasks [ m. id] = task
205204 }
206205
206+ func hasIconTask( _ id: String ) -> Bool {
207+ tasks [ id] != nil
208+ }
209+
207210 func cancelIconTask( _ id: String ) {
208211 tasks [ id] ? . cancel ( )
209212 tasks. removeValue ( forKey: id)
@@ -311,6 +314,9 @@ final class MapMarkerBuilder {
311314 return autoreleasepool { ( ) -> ( image: UIImage , isFallback: Bool ) ? in
312315 guard !Task. isCancelled else { return nil }
313316
317+ CATransaction . begin ( )
318+ defer { CATransaction . commit ( ) }
319+
314320 guard let svgImg = SVGKImage ( data: data) else {
315321 mapErrorHandler. report ( RNMapErrorCode . markerIconBuildFailed, " markerId= \( markerId) icon: SVGKImage init failed " )
316322 return ( createFallbackUIImage ( ) , true )
0 commit comments