iOS 文件预览和分享解决方案
场景:pdf文件通过下载接口存储到本地后的预览和分享.
方案一: UIDocumentinteractionController
使用方法:
1.创建一个UIDocumentInteractionController类的属性:必须要写成strong修饰符类型的属性,原因很简单,弹出的页面上操作设计到别的模块操作(比如保存到文件App)那么该VC就会被释放掉,通过强引用的方式解决
@property (nonatomic,strong)UIDocumentInteractionController * document;
2.遵循UIDocumentInteractionControllerDelegate
<UIDocumentInteractionControllerDelegate>
3.document的使用
//沙盒路径
NSString *newfilePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"下载项/%@-%@.pdf",[fileString lastPathComponent],_fileName]];
NSURL *url = [NSURL fileURLWithPath:newfilePath];
//初始化
self-> document = [UIDocumentInteractionController interactionControllerWithURL:url];
self-> document.delegate = self;
//页面弹出
//用户预览文件
[self->document presentPreviewAnimated:YES];
// 用户不预览文件直接分享
[self.document presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];
//代理(其他代理根据实际情况添加]
)
- (UIViewController*)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController*)controller{
return self;
}
方案二:UIDocumentPickerViewController
1.使用说明:该方式是手动的选择文件App中路径,手动存入
//Mode 选择UIDocumentPickerModeExportToService为手动存入文件到文件App
UIDocumentPickerViewController *documentPicker =
[[UIDocumentPickerViewController alloc]initWithURLs:@[url] inMode:UIDocumentPickerModeExportToService];
//解决不能全屏显示
[[UINavigationBar appearance] setTranslucent:NO];;
documentPicker.delegate = self;
[self presentViewController:documentPicker animated:YES completion:nil];
备注:
重点要了解UIDocumentPickerViewController在初始化的时候inMode的四种模式:
UIDocumentPickerModeImport: Import从提供者那里获得文件并拷贝到我们的host app。最经典的应用场景是在内容创建类应用中的使用。例如,像keynote、PowerPoint这样的演示制作应用,希望导入图片,视频,以及音频。它们希望拷贝一份这些数据以此保证它们随时可用。
UIDocumentPickerModeOpen: 和import一样,open同样从文件提供者那里获得数据并导入我们的host app,只是不同的是,这些数据没有被拷贝一份至我们的host app,数据还在原处。例如,你或许在音乐播放器、视频播放器,再或者图像编辑器中使用该方式。
UIDocumentPickerModeExportToService: Export使我们的host app可以保存文件至其它提供者。例如,这些提供者可能是常用的像Dropbox、iCloud Drive这样的云存储系统。host app可以通过export保存文件到提供者的存储空间。在接下来的编辑器例子中,当用户完成编辑,他们可以导出文件,然后稍后可以在其它app中打开这些文件。
UIDocumentPickerModeMoveToService: 除了host app不会持有一份儿文件的拷贝,其它Moving和export差不多。这或许是最不常用的操作,因为大多数iOS apps不是为了抛弃它们的数据才创建的。
说明:使用import方式示例
UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc]
initWithDocumentTypes:@[@"public.image"] inMode:UIDocumentPickerModeImport];
documentPicker.delegate = self;
documentPicker.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:documentPicker animated:YES completion:nil];
2.使用说明:该方式是开放'文件App'对Host App的访问权限,默认在文件App中生成一个Host App的文件夹,并且开放Documents文件的访问
a.plist文件中添加
Application supports iTunes file sharing YES
Supports opening documents in place YES
b.通过代码将文件添加到沙盒(下载代码 根据实际需求实现)