From 57ed6ef5d1468f18fd2222c2fc0b193292072f58 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sat, 2 Nov 2019 18:56:21 +0800 Subject: [PATCH 1/2] Use the only ZStack one state for indicator, instead of removing that indicator view from hierarchy --- SDWebImageSwiftUI/Classes/ImageManager.swift | 4 ++-- .../Classes/Indicator/Indicator.swift | 14 +++++--------- SDWebImageSwiftUI/Classes/WebImage.swift | 2 +- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/SDWebImageSwiftUI/Classes/ImageManager.swift b/SDWebImageSwiftUI/Classes/ImageManager.swift index 1b2db9bd..251bbe5d 100644 --- a/SDWebImageSwiftUI/Classes/ImageManager.swift +++ b/SDWebImageSwiftUI/Classes/ImageManager.swift @@ -11,8 +11,8 @@ import SDWebImage class ImageManager : ObservableObject { @Published var image: PlatformImage? // loaded image, note when progressive loading, this will published multiple times with different partial image - @Published var isLoading: Bool = false // whether network is loading or cache is querying - @Published var progress: CGFloat = 0 // network progress + @Published var isLoading: Bool = false // whether network is loading or cache is querying, should only be used for indicator binding + @Published var progress: CGFloat = 0 // network progress, should only be used for indicator binding var manager = SDWebImageManager.shared weak var currentOperation: SDWebImageOperation? = nil diff --git a/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift b/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift index 16f942ba..403480b8 100644 --- a/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift +++ b/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift @@ -32,16 +32,12 @@ struct IndicatorViewModifier : ViewModifier where T : View { var indicator: Indicator func body(content: Content) -> some View { - Group { - if imageManager.isFinished { - // Disable Indiactor - content + ZStack { + content + if imageManager.isLoading { + indicator.content($imageManager.isLoading, $imageManager.progress) } else { - // Enable indicator - ZStack { - content - indicator.content($imageManager.isLoading, $imageManager.progress) - } + indicator.content($imageManager.isLoading, $imageManager.progress).hidden() } } } diff --git a/SDWebImageSwiftUI/Classes/WebImage.swift b/SDWebImageSwiftUI/Classes/WebImage.swift index 04a8c54d..2b673934 100644 --- a/SDWebImageSwiftUI/Classes/WebImage.swift +++ b/SDWebImageSwiftUI/Classes/WebImage.swift @@ -62,7 +62,7 @@ public struct WebImage : View { .onDisappear { guard self.cancelOnDisappear else { return } // When using prorgessive loading, the previous partial image will cause onDisappear. Filter this case - if self.imageManager.isLoading && !self.imageManager.isIncremental { + if !self.imageManager.isFinished && !self.imageManager.isIncremental { self.imageManager.cancel() } } From e7c69317070c95ce2448692eb3d6da811aa4aeee Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sat, 2 Nov 2019 19:03:20 +0800 Subject: [PATCH 2/2] Naming it as `isSuccess` to match what it check --- SDWebImageSwiftUI/Classes/ImageManager.swift | 4 ++-- SDWebImageSwiftUI/Classes/WebImage.swift | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SDWebImageSwiftUI/Classes/ImageManager.swift b/SDWebImageSwiftUI/Classes/ImageManager.swift index 251bbe5d..36afc991 100644 --- a/SDWebImageSwiftUI/Classes/ImageManager.swift +++ b/SDWebImageSwiftUI/Classes/ImageManager.swift @@ -16,7 +16,7 @@ class ImageManager : ObservableObject { var manager = SDWebImageManager.shared weak var currentOperation: SDWebImageOperation? = nil - var isFinished: Bool = false // true means request end, load() do nothing + var isSuccess: Bool = false // true means request for this URL is ended forever, load() do nothing var isIncremental: Bool = false // true means during incremental loading var url: URL? @@ -70,7 +70,7 @@ class ImageManager : ObservableObject { self.isLoading = false self.progress = 1 if let image = image { - self.isFinished = true + self.isSuccess = true self.successBlock?(image, cacheType) } else { self.failureBlock?(error ?? NSError()) diff --git a/SDWebImageSwiftUI/Classes/WebImage.swift b/SDWebImageSwiftUI/Classes/WebImage.swift index 2b673934..e3804bc3 100644 --- a/SDWebImageSwiftUI/Classes/WebImage.swift +++ b/SDWebImageSwiftUI/Classes/WebImage.swift @@ -55,14 +55,14 @@ public struct WebImage : View { .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity) .onAppear { guard self.retryOnAppear else { return } - if !self.imageManager.isFinished { + if !self.imageManager.isSuccess { self.imageManager.load() } } .onDisappear { guard self.cancelOnDisappear else { return } // When using prorgessive loading, the previous partial image will cause onDisappear. Filter this case - if !self.imageManager.isFinished && !self.imageManager.isIncremental { + if !self.imageManager.isSuccess && !self.imageManager.isIncremental { self.imageManager.cancel() } }