Only apply resizable and rendering mode for non-animated image, since SDAnimatedImageView does not support this type of modification
This commit is contained in:
parent
95edc90787
commit
e9c28e59ce
|
@ -21,6 +21,8 @@ final class AnimatedImageModel : ObservableObject {
|
||||||
final class AnimatedImageLayout : ObservableObject {
|
final class AnimatedImageLayout : ObservableObject {
|
||||||
@Published var contentMode: ContentMode = .fill
|
@Published var contentMode: ContentMode = .fill
|
||||||
@Published var aspectRatio: CGFloat?
|
@Published var aspectRatio: CGFloat?
|
||||||
|
@Published var capInsets: EdgeInsets = EdgeInsets()
|
||||||
|
@Published var resizingMode: Image.ResizingMode?
|
||||||
@Published var renderingMode: Image.TemplateRenderingMode?
|
@Published var renderingMode: Image.TemplateRenderingMode?
|
||||||
@Published var interpolation: Image.Interpolation?
|
@Published var interpolation: Image.Interpolation?
|
||||||
@Published var antialiased: Bool = false
|
@Published var antialiased: Bool = false
|
||||||
|
@ -93,24 +95,55 @@ public struct AnimatedImage : ViewRepresentable {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenderingMode
|
// Animated Image does not support resizing mode and rendering mode
|
||||||
if let renderingMode = imageLayout.renderingMode {
|
if let image = view.wrapped.image, !image.sd_isAnimated, !image.conforms(to: SDAnimatedImageProtocol.self) {
|
||||||
switch renderingMode {
|
// ResizingMode
|
||||||
case .template:
|
if let resizingMode = imageLayout.resizingMode {
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
view.wrapped.image?.isTemplate = true
|
let capInsets = NSEdgeInsets(top: imageLayout.capInsets.top, left: imageLayout.capInsets.leading, bottom: imageLayout.capInsets.bottom, right: imageLayout.capInsets.trailing)
|
||||||
#else
|
#else
|
||||||
view.wrapped.image = view.wrapped.image?.withRenderingMode(.alwaysTemplate)
|
let capInsets = UIEdgeInsets(top: imageLayout.capInsets.top, left: imageLayout.capInsets.leading, bottom: imageLayout.capInsets.bottom, right: imageLayout.capInsets.trailing)
|
||||||
#endif
|
#endif
|
||||||
case .original:
|
switch resizingMode {
|
||||||
#if os(macOS)
|
case .stretch:
|
||||||
view.wrapped.image?.isTemplate = false
|
#if os(macOS)
|
||||||
#else
|
view.wrapped.image?.resizingMode = .stretch
|
||||||
view.wrapped.image = view.wrapped.image?.withRenderingMode(.alwaysOriginal)
|
view.wrapped.image?.capInsets = capInsets
|
||||||
#endif
|
#else
|
||||||
@unknown default:
|
view.wrapped.image = view.wrapped.image?.resizableImage(withCapInsets: capInsets, resizingMode: .stretch)
|
||||||
// Future cases, not implements
|
#endif
|
||||||
break
|
case .tile:
|
||||||
|
#if os(macOS)
|
||||||
|
view.wrapped.image?.resizingMode = .tile
|
||||||
|
view.wrapped.image?.capInsets = capInsets
|
||||||
|
#else
|
||||||
|
view.wrapped.image = view.wrapped.image?.resizableImage(withCapInsets: capInsets, resizingMode: .tile)
|
||||||
|
#endif
|
||||||
|
@unknown default:
|
||||||
|
// Future cases, not implements
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RenderingMode
|
||||||
|
if let renderingMode = imageLayout.renderingMode {
|
||||||
|
switch renderingMode {
|
||||||
|
case .template:
|
||||||
|
#if os(macOS)
|
||||||
|
view.wrapped.image?.isTemplate = true
|
||||||
|
#else
|
||||||
|
view.wrapped.image = view.wrapped.image?.withRenderingMode(.alwaysTemplate)
|
||||||
|
#endif
|
||||||
|
case .original:
|
||||||
|
#if os(macOS)
|
||||||
|
view.wrapped.image?.isTemplate = false
|
||||||
|
#else
|
||||||
|
view.wrapped.image = view.wrapped.image?.withRenderingMode(.alwaysOriginal)
|
||||||
|
#endif
|
||||||
|
@unknown default:
|
||||||
|
// Future cases, not implements
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,6 +193,8 @@ public struct AnimatedImage : ViewRepresentable {
|
||||||
capInsets: EdgeInsets = EdgeInsets(),
|
capInsets: EdgeInsets = EdgeInsets(),
|
||||||
resizingMode: Image.ResizingMode = .stretch) -> AnimatedImage
|
resizingMode: Image.ResizingMode = .stretch) -> AnimatedImage
|
||||||
{
|
{
|
||||||
|
imageLayout.capInsets = capInsets
|
||||||
|
imageLayout.resizingMode = resizingMode
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue