SDWebImageSwiftUI icon indicating copy to clipboard operation
SDWebImageSwiftUI copied to clipboard

How to reset to frame 0 after gif is played with AnimatedGif

Open morad opened this issue 1 year ago • 1 comments

Hello there,

What is the best way to reset the gif to zero frame after completing playing it? here is the code I have so far:

AnimatedImage(url: URL(string: selectedArticle.imageName), placeholderImage: .init(systemName: "Pic 7")) .customLoopCount(1) .runLoopMode(.common) .transition(.fade)

morad avatar Mar 23 '24 09:03 morad

Emmm.

Can you try using the "pausable" modifier ? I think if the gif play ended with last frame is normal behavior

Actually, this internal UIKit view(SDAnimatedImageView) has API to seek to any frame index if you want.

You can grab the native UIKit view via "onViewCreate" API and call the API. For example, you can even observe the player status using KVO

AnimatedImage(url: xxx)
.onViewCreate { view in
   if let player = view.player {
       let token = self.observe(value: player, forKeyPath: \.currentFrameIndex) { changes
           let currentFrameIndex = changes[.newValue]
           if (currentFrameIndex + 1 == player.totalFrameCount) {
              // last frame
              player.stopAnimating()
           }
       }
   }
}

dreampiggy avatar Mar 23 '24 14:03 dreampiggy