iOS 文件预览
QuickLook之工程文件预览
一、简介
QuickLook库可以让我们的App在iPhone/iPad中直接预览各个文件了。官方的开发文档中说明其支持的文件类型有:
- iWork documents
- Microsoft Office documents (Office ‘97 and newer)
- Rich Text Format (RTF) documents
- PDF files
- Images
- Text files whose uniform type identifier (UTI) conforms to the public.text type (see Uniform Type Identifiers Reference)
- Comma-separated value (csv) files
二、包含哪些类
通过api可以看到有哪些Classes
import QuickLook.QLBase//基础类
import QuickLook.QLPreviewController //预览Controller
import QuickLook.QLPreviewItem //单个数据源
import QuickLook.QLPreviewingController //
import QuickLook.QLThumbnailProvider
import QuickLook.QLThumbnailReply
import QuickLook.QLThumbnailRequest
三、使用demo
方式一:在自己Controller中展示文件如下:
//声明两个变量
fileprivate var preViewController = QLPreviewController.init()
//经过测试:可以是网络URLStr,必须要下载下来,可以用
fileprivate var filePath = Bundle.main.path(forResource: "消息提醒", ofType: "xlsx")
//ViewDidLoad中设置变量
preViewController.delegate = self
preViewController.dataSource = self
addChild(preViewController)
view.addSubview(preViewController.view)
//布局,可选
preViewController.view.snp.makeConstraints { (make) in
make.left.right.equalToSuperview()
make.bottom.equalToSuperview()
make.top.equalTo(topLayoutGuide.snp.bottom)
}
//遵循代理、DataSource
extension YPreviewVC: QLPreviewControllerDelegate, QLPreviewControllerDataSource {
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
return URL.init(fileURLWithPath: filePath!) as QLPreviewItem
}
func previewControllerDidDismiss(_ controller: QLPreviewController) {
print("用户界面已消失")
}
func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool {
return false
}
}
方式二:直接调用:
//直接调用跳转,用QLPreviewController的默认界面,自带系统的分享 self.navigationController?.pushViewController(preViewController, animated: true)
QuickLook之网络URL预览
一、把文件下载下来:Alamofire 5.0框架
方法如下:
fileprivate var filePath: URL?//声明的属性
fileprivate func reqestDownLoad() -> Void {
let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)//这是下载存放哪里
//自己文件名的在这里哦
/* let destination: DownloadRequest.DownloadFileDestination = {[weak self] (url, response) in
let docmentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let suggestFil = response.suggestedFilename == nil ? "http.xls" : response.suggestedFilename!
// response.suggestedFilename?//文件名
let newName = self!.fileName + "." + suggestFil.split(separator: ".").last!.description
let fileRUL = docmentURL?.appendingPathComponent(newName)
return (fileRUL!, [.removePreviousFile,.createIntermediateDirectories])
}*/
//urlTitle:urlString eg:http://file.xlsx
Alamofire.download(urlTitle, to: destination).validate().responseData {[weak self] response in
// case response.d
debugPrint(response)
print(response.temporaryURL)
if response.destinationURL != nil {
self!.filePath = response.destinationURL//下载完成的完整路径
self!.preViewController.reloadData()//刷新即可展示,类似tableView
}
print(response.destinationURL)
}
}
//MARK: 代理方法
extension YPreFileVC: QLPreviewControllerDelegate, QLPreviewControllerDataSource {
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
if filePath == nil {
return 0
}
return 1 //可以使多个文件
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
return filePath! as QLPreviewItem
}
func previewControllerDidDismiss(_ controller: QLPreviewController) {
print("用户界面已消失")
}
func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool {
return false
}
}
注意
如果是网络URL链接,下载下来的不想要保存到APP中可以直接在Controller视图消失的时候直接删除掉即可
override func viewDidDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if filePath != nil {//删错文件
do {
try FileManager.default.removeItem(at: filePath!)
}catch {
print(error)
print("删错失败啦")
}
}
}