@@ -21,6 +21,8 @@ final class AnimatedImageModel : ObservableObject {
2121final 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