From 11c38297343b2027e16b1d848f12aed2b88025f4 Mon Sep 17 00:00:00 2001 From: David Hart Date: Tue, 9 Mar 2021 20:00:51 +0100 Subject: [PATCH] Fix rendering mode in toolbar button by setting it on the UIImage itself --- SDWebImageSwiftUI/Classes/WebImage.swift | 25 +++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/SDWebImageSwiftUI/Classes/WebImage.swift b/SDWebImageSwiftUI/Classes/WebImage.swift index ba1fad04..4f1248ce 100644 --- a/SDWebImageSwiftUI/Classes/WebImage.swift +++ b/SDWebImageSwiftUI/Classes/WebImage.swift @@ -17,6 +17,10 @@ public struct WebImage : View { var placeholder: AnyView? var retryOnAppear: Bool = true var cancelOnDisappear: Bool = true + + #if !os(macOS) + var renderingMode: UIImage.RenderingMode? = nil + #endif @ObservedObject var imageManager: ImageManager @@ -123,6 +127,12 @@ public struct WebImage : View { #if os(macOS) result = Image(nsImage: image) #else + var image = image + + if let renderingMode = self.renderingMode { + image = image.withRenderingMode(renderingMode) + } + // Fix the SwiftUI.Image rendering issue, like when use EXIF UIImage, the `.aspectRatio` does not works. SwiftUI's Bug :) // See issue #101 var cgImage: CGImage? @@ -209,7 +219,20 @@ extension WebImage { /// Configurate this view's rendering mode. /// - Parameter renderingMode: The resizing mode public func renderingMode(_ renderingMode: Image.TemplateRenderingMode?) -> WebImage { - configure { $0.renderingMode(renderingMode) } + var result = configure { $0.renderingMode(renderingMode) } + + #if !os(macOS) + switch renderingMode { + case .original: + result.renderingMode = .alwaysOriginal + case .template: + result.renderingMode = .alwaysTemplate + case nil: + result.renderingMode = .automatic + } + #endif + + return result } /// Configurate this view's image interpolation quality