我需要从视频网址中获取缩略图,以便在UITableViewCell中的ImageView中显示。
我可以使用此方法获取缩略图,但它需要大量资源,因此在调用cellForRowAtIndexPath时,tableview滚动滞后并停止。
这是方法。
func createThumbnailOfVideoFromFileURL(videoURL: String) -> UIImage? {
let asset = AVAsset(url: URL(string: videoURL)!)
let assetImgGenerate = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
let time = CMTimeMakeWithSeconds(Float64(1), 100)
do {
let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
let thumbnail = UIImage(cgImage: img)
return thumbnail
} catch {
return UIImage(named: "ico_placeholder")
}
}
任何人都可以建议我使用SDWebImage的替代方法,以便图像进入缓存并且不会在每次调用UITableView委托时获取。 如果我错了,请提出任何其他方法。
答案 0 :(得分:0)
我按原样使用了上面的方法并将图像缓存在UIImage数组中,并在cellForRowAtIndexPath
中检查如果图像存在于该特定索引处,则使用其他方法在后台获取图像。
答案 1 :(得分:0)
不使用SDWebImage,但此代码的作用就像超级魅力
func getThumbnailFromUrl(_ url: String?, _ completion: @escaping ((_ image: UIImage?)->Void)) {
guard let url = URL(string: (url ?? "")) else { return }
DispatchQueue.main.async {
let asset = AVAsset(url: url)
let assetImgGenerate = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
let time = CMTimeMake(value: 2, timescale: 1)
do {
let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
let thumbnail = UIImage(cgImage: img)
completion(thumbnail)
} catch let error{
print("Error :: ", error)
completion(nil)
}
}
}
用法
self.getThumbnailFromUrl(video.url.description) { (image) in
//Use image where you want to use
}