@@ -21,6 +21,8 @@ final class AnimatedImageModel : ObservableObject {
21
21
final class AnimatedImageLayout : ObservableObject {
22
22
@Published var contentMode : ContentMode = . fill
23
23
@Published var aspectRatio : CGFloat ?
24
+ @Published var capInsets : EdgeInsets = EdgeInsets ( )
25
+ @Published var resizingMode : Image . ResizingMode ?
24
26
@Published var renderingMode : Image . TemplateRenderingMode ?
25
27
@Published var interpolation : Image . Interpolation ?
26
28
@Published var antialiased : Bool = false
@@ -93,24 +95,55 @@ public struct AnimatedImage : ViewRepresentable {
93
95
#endif
94
96
}
95
97
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 {
100
102
#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 )
102
104
#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 )
104
106
#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
+ }
114
147
}
115
148
}
116
149
@@ -160,6 +193,8 @@ public struct AnimatedImage : ViewRepresentable {
160
193
capInsets: EdgeInsets = EdgeInsets ( ) ,
161
194
resizingMode: Image . ResizingMode = . stretch) -> AnimatedImage
162
195
{
196
+ imageLayout. capInsets = capInsets
197
+ imageLayout. resizingMode = resizingMode
163
198
return self
164
199
}
165
200
0 commit comments