Skip to content

Commit e9c28e5

Browse files
committed
Only apply resizable and rendering mode for non-animated image, since SDAnimatedImageView does not support this type of modification
1 parent 95edc90 commit e9c28e5

File tree

1 file changed

+50
-15
lines changed

1 file changed

+50
-15
lines changed

SDWebImageSwiftUI/Classes/AnimatedImage.swift

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ final class AnimatedImageModel : ObservableObject {
2121
final class AnimatedImageLayout : ObservableObject {
2222
@Published var contentMode: ContentMode = .fill
2323
@Published var aspectRatio: CGFloat?
24+
@Published var capInsets: EdgeInsets = EdgeInsets()
25+
@Published var resizingMode: Image.ResizingMode?
2426
@Published var renderingMode: Image.TemplateRenderingMode?
2527
@Published var interpolation: Image.Interpolation?
2628
@Published var antialiased: Bool = false
@@ -93,24 +95,55 @@ public struct AnimatedImage : ViewRepresentable {
9395
#endif
9496
}
9597

96-
// RenderingMode
97-
if let renderingMode = imageLayout.renderingMode {
98-
switch renderingMode {
99-
case .template:
98+
// Animated Image does not support resizing mode and rendering mode
99+
if let image = view.wrapped.image, !image.sd_isAnimated, !image.conforms(to: SDAnimatedImageProtocol.self) {
100+
// ResizingMode
101+
if let resizingMode = imageLayout.resizingMode {
100102
#if os(macOS)
101-
view.wrapped.image?.isTemplate = true
103+
let capInsets = NSEdgeInsets(top: imageLayout.capInsets.top, left: imageLayout.capInsets.leading, bottom: imageLayout.capInsets.bottom, right: imageLayout.capInsets.trailing)
102104
#else
103-
view.wrapped.image = view.wrapped.image?.withRenderingMode(.alwaysTemplate)
105+
let capInsets = UIEdgeInsets(top: imageLayout.capInsets.top, left: imageLayout.capInsets.leading, bottom: imageLayout.capInsets.bottom, right: imageLayout.capInsets.trailing)
104106
#endif
105-
case .original:
106-
#if os(macOS)
107-
view.wrapped.image?.isTemplate = false
108-
#else
109-
view.wrapped.image = view.wrapped.image?.withRenderingMode(.alwaysOriginal)
110-
#endif
111-
@unknown default:
112-
// Future cases, not implements
113-
break
107+
switch resizingMode {
108+
case .stretch:
109+
#if os(macOS)
110+
view.wrapped.image?.resizingMode = .stretch
111+
view.wrapped.image?.capInsets = capInsets
112+
#else
113+
view.wrapped.image = view.wrapped.image?.resizableImage(withCapInsets: capInsets, resizingMode: .stretch)
114+
#endif
115+
case .tile:
116+
#if os(macOS)
117+
view.wrapped.image?.resizingMode = .tile
118+
view.wrapped.image?.capInsets = capInsets
119+
#else
120+
view.wrapped.image = view.wrapped.image?.resizableImage(withCapInsets: capInsets, resizingMode: .tile)
121+
#endif
122+
@unknown default:
123+
// Future cases, not implements
124+
break
125+
}
126+
}
127+
128+
// RenderingMode
129+
if let renderingMode = imageLayout.renderingMode {
130+
switch renderingMode {
131+
case .template:
132+
#if os(macOS)
133+
view.wrapped.image?.isTemplate = true
134+
#else
135+
view.wrapped.image = view.wrapped.image?.withRenderingMode(.alwaysTemplate)
136+
#endif
137+
case .original:
138+
#if os(macOS)
139+
view.wrapped.image?.isTemplate = false
140+
#else
141+
view.wrapped.image = view.wrapped.image?.withRenderingMode(.alwaysOriginal)
142+
#endif
143+
@unknown default:
144+
// Future cases, not implements
145+
break
146+
}
114147
}
115148
}
116149

@@ -160,6 +193,8 @@ public struct AnimatedImage : ViewRepresentable {
160193
capInsets: EdgeInsets = EdgeInsets(),
161194
resizingMode: Image.ResizingMode = .stretch) -> AnimatedImage
162195
{
196+
imageLayout.capInsets = capInsets
197+
imageLayout.resizingMode = resizingMode
163198
return self
164199
}
165200

0 commit comments

Comments
 (0)