【发布时间】:2019-09-13 02:23:09
【问题描述】:
我知道SDWebImage 在后台线程中加载图像,因此在进行下载时您不会阻塞 UI/主线程。此外,它还会对您下载的所有图像进行磁盘缓存,并且永远不会从同一个URL 重新下载图像。
所以我想知道视频是否有相似或相同的东西?
注意事项:我将视频添加为子图层。
let videoURL = URL(string: postArray[indexPath.item].media[0].videoURLString!)//need to do error handlin here
print(videoURL as Any, "<-- video url in dispkay")
let player = AVPlayer(url: videoURL! as URL)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = CGRect(x: -8, y: 0, width: 138, height: 217)//cell.frame
cell.imageOrVideoView.layer.addSublayer(playerLayer)
//Other code and play()
This was recommended 过去,但它似乎做了一些不同的事情,或者在租用时有太多我不需要的额外功能。
更新:
我在测试什么:
DispatchQueue.global(qos: .default).async(execute: {
var downloadedData: Data? = nil
if let url = URL(string: videoURL) {
do {
downloadedData = try Data(contentsOf: url)
} catch {
print(error, "downloaded Data failed")
}
}
if downloadedData != nil {
// STORE IN FILESYSTEM
var cachesDirectory = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0]
var file = URL(fileURLWithPath: cachesDirectory).appendingPathComponent(videoURL).absoluteString
do {
try downloadedData?.write(to: URL(string: file)!)
} catch {
print(error, "error dowloading data and writing it")
}
// STORE IN MEMORY
if let downloadedData = downloadedData {
memoryCache?.setObject(downloadedData as AnyObject, forKey: videoURL as AnyObject)
}
}
// NOW YOU CAN CREATE AN AVASSET OR UIIMAGE FROM THE FILE OR DATA
})
但是我不明白我是应该在最后一行之后做某事,还是应该在 }) 之后做某事,或者我是否需要在此处添加更新 UI。
【问题讨论】:
-
请让您的问题独立存在。
imageUrlString是什么? -
什么算法?您的问题没有解释您的代码应该做什么。显示输入和所需输出的清晰示例并解释逻辑。
标签: ios swift asynchronous firebase-realtime-database