產品需求 實現(xiàn)PDF文件下載既能在線瀏覽 又能從手機的文件夾打開禁荒。
首先實現(xiàn)在線瀏覽有很多方法。如 自定義VC 與view實現(xiàn) 或者? UIWebView / WKWebView 或者利用系統(tǒng)自帶的UIDocumentPickerViewController? 都可以實現(xiàn)涣楷,但是要實現(xiàn)在手機的文件里打開,這個是第一次遇到,之前沒有做過這方面的需求垦藏,于是有了調研披蕉。
?首先想到的是 給用戶文件下載的URL 在Safari操作颈畸。這是基于iPhone手機本身的機制乌奇。但顯然這是不滿足產品需求的,于是查資料眯娱,看到了系統(tǒng)自帶的UIDocumentInteractionController
UIDocumentInteractionController?
?主要作用
1).預覽類似pdf礁苗、doc、ppt等類型文件的類徙缴。
2).可以將用戶接收到的文件分享到用戶手機上的其他App中试伙。
使用方法
```
@property (nonatomic, strong) UIDocumentInteractionController *DIController;
1)簽代理?UIDocumentInteractionControllerDelegate
2)初始化?
NSString*load_url = @""; //下載完成后的URL
?self.DIController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL URLWithString:load_url]];
? self.DIController.delegate=self;
? ?[self.DIController presentPreviewAnimated:YES];
3)實現(xiàn)代理方法
#pragma mark - UIDocumentInteractionControllerDelegate
- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller {
? ? return self.downloadVC;
}
- (UIView*)documentInteractionControllerViewForPreview:(UIDocumentInteractionController*)controller {
? ? return self.downloadVC.view;
}
- (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController*)controller {
? ? return self.downloadVC.view.frame;
}
```
下載文件的方法
#pragma mark- 下載文件
```
-(NSURLSessionTask *)downloadWithURL:(NSString *)URL
?? ? ? ? ? ? ? ? ? ? ? ? ? ? fileDir:(NSString*)fileDir
? ? ? ? ? ? ? ? ? ? ? ? ? ? progress:(void(^)(NSProgress*progress))progress
?? ? ? ? ? ? ? ? ? ? ? ? ? ? success:(void(^)(NSString*filePath))success
?? ? ? ? ? ? ? ? ? ? ? ? ? ? failure:(void(^)(NSError*error))failure{
? ? AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
? ? NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URL]];
? ? NSURLSessionDownloadTask*downloadTask = [managerdownloadTaskWithRequest:requestprogress:^(NSProgress*_NonnulldownloadProgress) {
? ? ? ? //下載進度
? ? ? ? progress ? progress(downloadProgress) :nil;
? ? ? ? TSLog(@"下載進度:%.2f%%",100.0*downloadProgress.completedUnitCount/downloadProgress.totalUnitCount);
? ? }destination:^NSURL*_Nonnull(NSURL*_NonnulltargetPath,NSURLResponse*_Nonnullresponse) {
? ? ? ? //拼接緩存目錄
? ? ? ? NSString *downloadStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] ;
? ? ? ? //拼接文件路徑
? ? ? ? NSString*filePath = [downloadStrstringByAppendingPathComponent:fileDir];
? ? ? ? return[NSURLfileURLWithPath:filePath];
? ? }completionHandler:^(NSURLResponse*_Nonnullresponse,NSURL*_NullablefilePath,NSError*_Nullableerror) {
? ? ? ? success&&filePath ? success(filePath.absoluteString/** NSURL->NSString*/) :nil;
? ? ? ? failure && error ? failure(error) :nil;
? ? }];
? ? //開始下載
? ? [downloadTaskresume];
? ? returndownloadTask;
}
```
此時就完成PDF文件下載完后預覽 如下圖?
點擊右上角的按鈕會彈出如下圖的彈框 點擊save to files? 就可以把下載好的文件存儲到手機的文件夾里
當然這只是一個 大概的實現(xiàn)過程,其中有些細節(jié)可以根據(jù)產品需求來完善于样。如下載的名稱? 存儲在文件夾里可以歸類等等