簡體   English   中英

如何在 iOS 應用程序中使用 GIF,而不使用 UIKit 在 Swift 5 中的任何第三方庫?

[英]How to use GIFs inside an iOS App without any Third Party Library in Swift 5 using UIKit?

我目前正在從事一個嚴重依賴 GIF 的項目。 但是,在迷失方向之前,我從未在 Swift 中為 iOS 使用過 GIF;)

我嘗試的第一件事是將一些 GIF 導入到我的Assets.xcassets Folder中。 我意識到對 GIF 使用 ImageSet 是行不通的

所以我的第一個問題:如何將 GIF 導入我的項目。 我應該只使用一種分辨率還是三種更好的圖像方式?

然后我已經檢查了一些關於在UIImageView中以編程方式和通過 Storyboard呈現 GIF 的問題。 正如我發現的那樣,通過使用 UIImage Class 的擴展,這可能是最好的方法。 但是,由於某種原因,Swift 4 示例對我不起作用;(

所以我的第二個問題:如何在我的項目中使用導入的 GIF,並以編程方式在 UIImage 視圖中顯示它們?

非常感謝您提前提供的幫助!

您必須手動解碼 GIF 數據,然后才能逐幀顯示。 在這里你不會有任何簡單的答案,bcs 這絕對是一個非常難的主意,嘗試從第三方和播放器復制解碼算法,或者只是使用它。 SDWebImage這樣的東西將是您的最佳選擇。 檢查 SDAnimatedImagePlayer、SDWebAnimatedImage 類。

我也有這樣的問題要解決。 我發現此線程中的答案很有幫助。 請檢查一下。 在 Iphone UIImageView 中添加動畫 Gif 圖像

另外,我強烈建議檢查FLAnimatedImage中的一些實現。 它處理 iOS 中的 GIF 可能需要的顯示、播放和其他功能。

如果您的動畫 gif 對所有幀都具有恆定的幀時間,那么您可以輕松地從資產目錄中加載它,而無需使用第三方庫:

extension UIImage {
    static func animatedGif(named: String, framesPerSecond: Double = 10) -> UIImage? {
        guard let asset = NSDataAsset(name: named) else { return nil }
        return animatedGif(from: asset.data, framesPerSecond: framesPerSecond)
    }

    static func animatedGif(from data: Data, framesPerSecond: Double = 10) -> UIImage? {
        guard let source = CGImageSourceCreateWithData(data as CFData, nil) else { return nil }
        let imageCount = CGImageSourceGetCount(source)
        var images: [UIImage] = []
        for i in 0 ..< imageCount {
            if let cgImage = CGImageSourceCreateImageAtIndex(source, i, nil) {
                images.append(UIImage(cgImage: cgImage))
            }
        }
        return UIImage.animatedImage(with: images, duration: Double(images.count) / framesPerSecond)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM