你的位置:首页 > 操作系统

[操作系统]iOS QuickLookUIDocumentInteractionController


 

打开一个已经下载好的文件有很多种方法,例如打开一个MP4文件,你可以选择AVPlayer,MPMovieplayerViewController,QuickLook,或者是百度影音等等,方法不止一种,以需求而定.

QuickLook是快速查看,平时使用Mac电脑就会比较熟悉.不依赖完整的应用,而是提供了一种快速打开只读的方式预览文件.

iOS提供了两种QuickLook的方式

1: QuickLook框架

2: UIDocumentInteractionController

这两种方法最后的效果基本都差不多. 要是选一种,个人比较推荐 UIDocumentInteractionController. 因为只需要稍稍改动一下,就可以用完整的应用打开这个文件 .适应面比较广.

 

先说QuickLook, 虽然功能如框架名, 只提供预览, 但是比起UIDocumentInteractionController, 感觉比较正宗.

先 #import <QuickLook/QuickLook.h> 然后遵守<QLPreviewControllerDelegate,QLPreviewControllerDataSource>协议 

这个主要对象有2个 QLPreviewController(显示页面) 和 QLPreviewItem (文件项目)

 QLPreviewController * ql = [[QLPreviewController alloc]init]; ql.delegate = self; ql.dataSource = self;

@required 的方法必须实现 , 所以先加上

- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller;- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index;

以上两个方法都提到了一个重要的参数 QLPreviewItem . 其实是一个URL .

第一个方法,如果一次只打开一个文件,return 1;

第二个方法,return url;

这样就能预览文件了.

 

再说UIDocumentInteractionController , 个人觉得这个比较牛, 而且是属于 UIkit 框架,所以不需要手动添加框架. 能实现的功能也比较多.

首先........其实你要是不想做一些特别的操作, 代理都可以不用,但是它是有代理的哦 <UIDocumentInteractionControllerDelegate>,里面也就是添加了一些监听和方法.

定义一个变量  documentInteradctionController

 url = [[NSBundle mainBundle] URLForResource:@"123" withExtension:@"png"];  if (url) {    _documentInteradctionController = [UIDocumentInteractionController interactionControllerWithURL:url];//    _documentInteradctionController.delegate = self; 不用代理方法就可以不设置    [self presentViewController:ql animated:YES completion:nil];   }

这就能预览了, 和QuickLook一样.

到这,这2种预览方法都是在App内进行. 文件是readOnly. 想要用完整的程序打开文件,还得使用 UIDocumentInteractionController,这个类可以检查你的手机里有哪些程序可以打开目标文件,而且不需要任何设置.使用起来也很简单

    [_documentInteradctionController presentPreviewAnimated:YES];    //    [self presentViewController:ql animated:YES completion:nil]; 这是实现预览的方法

及时上面的代码 [self present.....] 改成[_documentInteradctionController present......]就可以了. 这时页面弹出一个UIActionSheet . 让用户选择打开方法. 非常简便.