Jelajahi Sumber

Set UI related properties in main queue

onevcat 5 tahun lalu
induk
melakukan
5440125c3e

+ 2 - 2
Sources/General/KFOptionsSetter.swift

@@ -217,8 +217,8 @@ extension KFOptionSetter {
     /// - Returns: A `Self` value with changes applied.
     ///
     /// - Note:
-    /// This option does not affect the callbacks for UI related extension methods. You will always get the
-    /// callbacks called from main queue.
+    /// This option does not affect the callbacks for UI related extension methods or `KFImage` result handlers.
+    /// You will always get the callbacks called from main queue.
     public func callbackQueue(_ queue: CallbackQueue) -> Self {
         options.callbackQueue = queue
         return self

+ 7 - 6
Sources/SwiftUI/ImageBinder.swift

@@ -102,13 +102,14 @@ extension KFImage {
                         self.downloadTask = nil
                         switch result {
                         case .success(let value):
-                            self.loadedImage = value.image
 
-                            self.isLoaded.wrappedValue = true
-
-                            let animation = self.fadeTransitionDuration(cacheType: value.cacheType)
-                                .map { duration in Animation.linear(duration: duration) }
-                            withAnimation(animation) { self.loaded = true }
+                            CallbackQueue.mainCurrentOrAsync.execute {
+                                self.loadedImage = value.image
+                                self.isLoaded.wrappedValue = true
+                                let animation = self.fadeTransitionDuration(cacheType: value.cacheType)
+                                    .map { duration in Animation.linear(duration: duration) }
+                                withAnimation(animation) { self.loaded = true }
+                            }
 
                             CallbackQueue.mainAsync.execute {
                                 self.onSuccessDelegate.call(value)