我正在尝试将 FLAnimatedImage 合并到我基于 Swift 的 iOS 应用程序中,以显示动画 GIF。
我开始导入
FLAnimatedImage.h
和 FLAnimatedImageView.m
文件并毫无问题地创建 Bridging-Header.h
。
我尝试使用以下代码将 Gif 加载到我的 ImageView 中:
@IBOutlet weak var animatedImageView: FLAnimatedImageView! = animatedImageView.animatedImage = FLAnimatedImage(animatedGIFData: NSData(contentsOfFile: "chicken.gif")) `
但是在应用程序启动时失败,并显示以下错误代码:
异常“NSInvalidArgumentException”,原因:“-[UIImageView setAnimatedImage:]:无法识别的选择器发送到实例 0x78e3c820”
关于如何修复上述错误有什么建议吗?
感谢您的帮助。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var gifView: FLAnimatedImageView!
override func viewDidLoad() {
super.viewDidLoad()
print("\(gifView)")
if let path = NSBundle.mainBundle().pathForResource("rock", ofType: "gif") {
if let data = NSData(contentsOfFile: path) {
let gif = FLAnimatedImage(animatedGIFData: data)
gifView.animatedImage = gif
}
}
}
}
顺便问一下,你的故事板中的
animatedImageView
是从 FLAnimatedImageView 子类化的吗?
斯威夫特 4: Gif URL 示例
@IBOutlet weak var gifImageView: FLAnimatedImageView!
private func showGifImage(url: URL) {
DispatchQueue.global().async { [weak self] in
do {
let gifData = try Data(contentsOf: url)
DispatchQueue.main.async {
self?.gifImageView.animatedImage = FLAnimatedImage(gifData: gifData)
}
} catch {
print(error)
}
}
}
Swift 5:gif 资源解决方案
extension FLAnimatedImage {
convenience init (gifResource: String) {
if let bundleURL = Bundle.main.url(forResource: gifResource, withExtension: "gif"),
let imageData = try? Data(contentsOf: bundleURL) {
self.init(animatedGIFData: imageData)
}
else {
self.init(animatedGIFData: nil)
}
}
}
不确定这是否是最好的解决方案,但它对我有用,请随时发表评论建议。
我让它与以下扩展一起使用:
extension FLAnimatedImage {
convenience init(gifResource: String) {
self.init(animatedGIFData: NSData(contentsOfFile: NSBundle.mainBundle().pathForResource(gifResource, ofType: "")!))
}
}
声明:
@IBOutlet weak var animatedImageView: FLAnimatedImageView!
致电:
animatedImageView.animatedImage = FLAnimatedImage(gifResource: "chicken.gif")
在故事板中,UIImageView 有一个自定义子类:
FLAnimatedImageView