SDWebImage / SDWebImageSwiftUI

SwiftUI Image loading and Animation framework powered by SDWebImage
https://sdwebimage.github.io/SDWebImageSwiftUI
MIT License
2.18k stars 224 forks source link

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

Open morad opened 6 months ago

morad commented 6 months ago

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)

dreampiggy commented 6 months ago

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()
           }
       }
   }
}