繁体   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