Преглед изворни кода

Make fade work as in KFImage

onevcat пре 5 година
родитељ
комит
d697cf3efc

+ 0 - 2
Demo/Demo/Kingfisher-Demo/SwiftUIViews/SwiftUIList.swift

@@ -79,8 +79,6 @@ struct SwiftUIList : View {
                     .aspectRatio(contentMode: .fit)
                     .cornerRadius(20)
                     .frame(width: 300, height: 300)
-                    .opacity(done || alreadyCached ? 1.0 : 0.3)
-                    .animation(.linear(duration: 0.4))
 
                 Spacer()
             }.padding(.vertical, 12)

+ 9 - 1
Sources/SwiftUI/KFImage.swift

@@ -130,6 +130,7 @@ struct KFImageRenderer: View {
     private let binder: KFImage.ImageBinder
 
     @State private var loadingResult: Result<RetrieveImageResult, KingfisherError>?
+    @State private var isLoaded = false
 
     // Acts as a placeholder when loading an image.
     var placeholder: AnyView?
@@ -154,6 +155,8 @@ struct KFImageRenderer: View {
                 .reduce(Image(crossPlatformImage: r.image)) {
                     current, config in config(current)
                 }
+                .opacity(isLoaded ? 1.0 : 0.0)
+                .animation(.default)
         } else {
             Group {
                 if placeholder != nil {
@@ -167,7 +170,12 @@ struct KFImageRenderer: View {
                     return
                 }
                 if !binder.loadingOrSucceeded {
-                    binder.start { self.loadingResult = $0 }
+                    binder.start {
+                        self.loadingResult = $0
+                        loadingResult?.matchSuccess { _ in
+                            CallbackQueue.mainAsync.execute { isLoaded = true }
+                        }
+                    }
                 }
             }
             .onDisappear { [weak binder = self.binder] in