美文网首页
iOS 文件预览和分享解决方案

iOS 文件预览和分享解决方案

作者: 拉链扣 | 来源:发表于2021-07-26 14:40 被阅读0次

    场景: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.通过代码将文件添加到沙盒(下载代码 根据实际需求实现)

    相关文章

      网友评论

          本文标题:iOS 文件预览和分享解决方案

          本文链接:https://www.haomeiwen.com/subject/efqpmltx.html