@@ -17,6 +17,8 @@ public struct WebImage : View {
17
17
var placeholder : AnyView ?
18
18
var retryOnAppear : Bool = true
19
19
var cancelOnDisappear : Bool = true
20
+ var pausable : Bool = true
21
+ var purgeable : Bool = false
20
22
21
23
@ObservedObject var imageManager : ImageManager
22
24
@@ -26,9 +28,6 @@ public struct WebImage : View {
26
28
27
29
@ObservedObject var imagePlayer : ImagePlayer
28
30
29
- var pausable : Bool = true
30
- var purgeable : Bool = false
31
-
32
31
/// Create a web image with url, placeholder, custom options and context.
33
32
/// - Parameter url: The image url
34
33
/// - Parameter options: The options to use when downloading the image. See `SDWebImageOptions` for the possible values.
@@ -61,35 +60,26 @@ public struct WebImage : View {
61
60
imageManager. load ( )
62
61
}
63
62
return Group {
64
- if imageManager . image != nil {
63
+ if let image = imageManager . image {
65
64
if isAnimating && !imageManager. isIncremental {
66
- if imagePlayer. currentFrame != nil {
67
- configure ( image: imagePlayer. currentFrame!)
68
- . onPlatformAppear ( appear: {
69
- self . imagePlayer. startPlaying ( )
70
- } , disappear: {
71
- if self . pausable {
72
- self . imagePlayer. pausePlaying ( )
73
- } else {
74
- self . imagePlayer. stopPlaying ( )
75
- }
76
- if self . purgeable {
77
- self . imagePlayer. clearFrameBuffer ( )
78
- }
79
- } )
80
- } else {
81
- configure ( image: imageManager. image!)
82
- . onReceive ( imageManager. $image) { image in
83
- if let animatedImage = image as? SDAnimatedImageProvider {
84
- self . imagePlayer. setupPlayer ( animatedImage: animatedImage)
85
- }
65
+ setupPlayer ( )
66
+ . onPlatformAppear ( appear: {
67
+ self . imagePlayer. startPlaying ( )
68
+ } , disappear: {
69
+ if self . pausable {
70
+ self . imagePlayer. pausePlaying ( )
71
+ } else {
72
+ self . imagePlayer. stopPlaying ( )
86
73
}
87
- }
74
+ if self . purgeable {
75
+ self . imagePlayer. clearFrameBuffer ( )
76
+ }
77
+ } )
88
78
} else {
89
- if imagePlayer . currentFrame != nil {
90
- configure ( image: imagePlayer . currentFrame! )
79
+ if let currentFrame = imagePlayer . currentFrame {
80
+ configure ( image: currentFrame)
91
81
} else {
92
- configure ( image: imageManager . image! )
82
+ configure ( image: image)
93
83
}
94
84
}
95
85
} else {
@@ -165,6 +155,19 @@ public struct WebImage : View {
165
155
}
166
156
}
167
157
158
+ /// Animated Image Support
159
+ func setupPlayer( ) -> some View {
160
+ if let currentFrame = imagePlayer. currentFrame {
161
+ return configure ( image: currentFrame)
162
+ } else {
163
+ if let animatedImage = imageManager. image as? SDAnimatedImageProvider {
164
+ self . imagePlayer. setupPlayer ( animatedImage: animatedImage)
165
+ self . imagePlayer. startPlaying ( )
166
+ }
167
+ return configure ( image: imageManager. image!)
168
+ }
169
+ }
170
+
168
171
/// Placeholder View Support
169
172
func setupPlaceholder( ) -> some View {
170
173
// Don't use `Group` because it will trigger `.onAppear` and `.onDisappear` when condition view removed, treat placeholder as an entire component
0 commit comments