大佬教程收集整理的这篇文章主要介绍了是否可以缓存视频? IOS – 斯威夫特,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要实现的是一个tableView,我在其中显示视频,并在滚动时自动下载和播放.喜欢Instagram …
到目前为止,我已经管理了大部分内容,但我想改变的是,每次我查看一个单元格时,视频会一次又一次地下载….当然必须有一种方法来缓存视频,或者只下载相同的视频一次….就像你使用SDWebImages进行图像一样.
此外,每当我查看单元格时,它都会下载,滚动很糟糕,你可以想象.
现在我似乎无法弄清楚Instagram是如何做到的,但我100%确定他们不会多次下载同一个视频!
如果有人有建议或想法,我很乐意听到他们!
提前谢谢了.
public enum Result<T> { case success(T) case failure(NSError) } class CacheManager { static let shared = CacheManager() private let fileManager = FileManager.default private lazy var mainDirectoryUrl: URL = { let documentsUrl = self.fileManager.urls(for: .cachesDirectory,in: .userDomainMask).first! return documentsUrl }() func getFileWith(StringUrl: String,completionHandler: @escaping (Result<URL>) -> Void ) { let file = directoryFor(StringUrl: StringUrl) //return file path if already exists in cache directory guard !fileManager.fileExists(atPath: file.path) else { completionHandler(Result.success(filE)) return } DispatchQueue.global().async { if let videoData = NSData(contentsOf: URL(String: StringUrl)!) { videoData.write(to: file,atomically: truE) DispatchQueue.main.async { completionHandler(Result.success(filE)) } } else { DispatchQueue.main.async { completionHandler(Result.failure(NSError.errorWith(text: "Can't download video"))) } } } } private func directoryFor(StringUrl: String) -> URL { let fileURL = URL(String: StringUrl)!.lastPathComponent let file = self.mainDirectoryUrl.appendingPathComponent(fileURL) return file } }
此类的示例用法如下所示:
CacheManager.shared.getFileWith(StringUrl: "http://techslides.com/demos/sample-videos/small.mp4") { result in switch result { case .success(let url): // do some magic with path to saved video case .failure(let error): // handle errror } }
以上是大佬教程为你收集整理的是否可以缓存视频? IOS – 斯威夫特全部内容,希望文章能够帮你解决是否可以缓存视频? IOS – 斯威夫特所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。