如何使用 UIKit 在 iOS 应用程序中使用没有任何第三方库的 GIF Swift 5?
How to use GIFs inside an iOS App without any Third Party Library in Swift 5 using UIKit?
我目前正在从事一个严重依赖 GIF 的项目。但是,在我迷路之前,我从未在 Swift 中使用过 GIF iOS;)
The first thing I tried was to import some GIFs to my Assets.xcassets Folder
. I realised that using an ImageSet for GIFs does not work.
所以我的第一个问题:如何将 GIF 导入我的项目。我应该只使用一种分辨率还是三种分辨率更好?
Then I already checked out some Questions about presenting a GIF inside an UIImageView
, programatically and via Storyboard. As I figured out this is probably best possible by using an Extension for UIImage Class. However, the Swift 4 Examples didn't work for me because of some reason;(
所以我的第二个问题:如何在我的项目中使用导入的 GIF 并以编程方式在 UIImage 视图中显示它们?
非常感谢你们提前的帮助!
您必须手动解码 GIF 数据,然后才能逐帧显示。你不会在这里有任何简单的答案,因为这绝对是一个很难的主意,尝试从第三方和播放器复制解码算法或直接使用它。 SDWebImage 之类的内容将是您的最佳选择。检查 SDAnimatedImagePlayer、SDWebAnimatedImage 类.
我也有这样的问题要解决。我发现此线程中的答案很有帮助。请检查它们。
Add animated Gif image in Iphone UIImageView
此外,我强烈建议检查 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)
}
}
我目前正在从事一个严重依赖 GIF 的项目。但是,在我迷路之前,我从未在 Swift 中使用过 GIF iOS;)
The first thing I tried was to import some GIFs to my
Assets.xcassets Folder
. I realised that using an ImageSet for GIFs does not work.
所以我的第一个问题:如何将 GIF 导入我的项目。我应该只使用一种分辨率还是三种分辨率更好?
Then I already checked out some Questions about presenting a GIF inside an
UIImageView
, programatically and via Storyboard. As I figured out this is probably best possible by using an Extension for UIImage Class. However, the Swift 4 Examples didn't work for me because of some reason;(
所以我的第二个问题:如何在我的项目中使用导入的 GIF 并以编程方式在 UIImage 视图中显示它们?
非常感谢你们提前的帮助!
您必须手动解码 GIF 数据,然后才能逐帧显示。你不会在这里有任何简单的答案,因为这绝对是一个很难的主意,尝试从第三方和播放器复制解码算法或直接使用它。 SDWebImage 之类的内容将是您的最佳选择。检查 SDAnimatedImagePlayer、SDWebAnimatedImage 类.
我也有这样的问题要解决。我发现此线程中的答案很有帮助。请检查它们。 Add animated Gif image in Iphone UIImageView
此外,我强烈建议检查 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)
}
}