zoukankan      html  css  js  c++  java
  • iOS开发- 获取本地视频文件

    下面具体介绍下实现过程。
    先看效果图。
    图1. 未实现功能前, iTunes截图

    图2. 实现功能后, iTunes截图

    图3. 实现功能后, 运行截图

    好了, 通过图片, 我们可以看到实现的效果。
    功能包括: 允许通过iTunes导入文件。 可以查看沙盒下所有文件。

     实现过程:
    1。在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES。

    2。具体代码:
    ViewController.h

    import <UIKit/UIKit.h>

    //step1. 导入QuickLook库和头文件

    import <QuickLook/QuickLook.h>

    //step2. 继承协议
    @interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,QLPreviewControllerDataSource,QLPreviewControllerDelegate,UIDocumentInteractionControllerDelegate>
    {
    //step3. 声明显示列表
    IBOutlet UITableView *readTable;
    }

    //setp4. 声明变量
    //UIDocumentInteractionController : 一个文件交互控制器,提供应用程序管理与本地系统中的文件的用户交互的支持
    //dirArray : 存储沙盒子里面的所有文件
    @property(nonatomic,retain) NSMutableArray *dirArray;
    @property (nonatomic, strong) UIDocumentInteractionController *docInteractionController;
    @end

    ViewController.m

    - (void)viewDidLoad {

       [super viewDidLoad];

    //step5. 保存一张图片到设备document文件夹中(为了测试方便)  
    UIImage *image = [UIImage imageNamed:@"testPic.jpg"];  
    NSData *jpgData = UIImageJPEGRepresentation(image, 0.8);  
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory  
    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"testPic.jpg"]; //Add the file name  
    [jpgData writeToFile:filePath atomically:YES]; //Write the file  
      
      
    //step5. 保存一份txt文件到设备document文件夹中(为了测试方便)  
    char *saves = "Colin_csdn";  
    NSData *data = [[NSData alloc] initWithBytes:saves length:10];  
    filePath = [documentsPath stringByAppendingPathComponent:@"colin.txt"];  
    [data writeToFile:filePath atomically:YES];  
      
      
    //step6. 获取沙盒里所有文件  
    NSFileManager *fileManager = [NSFileManager defaultManager];  
    //在这里获取应用程序Documents文件夹里的文件及文件夹列表  
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    NSString *documentDir = [documentPaths objectAtIndex:0];  
    NSError *error = nil;  
    NSArray *fileList = [[NSArray alloc] init];  
    //fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组  
    fileList = [fileManager contentsOfDirectoryAtPath:documentDir error:&error];  
      
    self.dirArray = [[NSMutableArray alloc] init];  
    for (NSString *file in fileList)  
    {  
        [self.dirArray addObject:file];  
    }  
    

    //step6. 刷新列表, 显示数据
    [readTable reloadData];
    }

    //step7. 利用url路径打开UIDocumentInteractionController

    - (void)setupDocumentControllerWithURL:(NSURL *)url
    {
    if (self.docInteractionController == nil)
    {
    self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url];
    self.docInteractionController.delegate = self;
    }
    else
    {
    self.docInteractionController.URL = url;
    }
    }

    pragma mark- 列表操作

    • (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
      {
      return 1;
      }
    • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
      {
      static NSString *CellName = @"CellName";
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellName];
      if (cell == nil)
      {
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellName];
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
      }

      NSURL *fileURL= nil;
      NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *documentDir = [documentPaths objectAtIndex:0];
      NSString *path = [documentDir stringByAppendingPathComponent:[self.dirArray objectAtIndex:indexPath.row]];
      fileURL = [NSURL fileURLWithPath:path];
      [self setupDocumentControllerWithURL:fileURL];
      cell.textLabel.text = [self.dirArray objectAtIndex:indexPath.row];
      NSInteger iconCount = [self.docInteractionController.icons count];
      if (iconCount > 0)
      {
      cell.imageView.image = [self.docInteractionController.icons objectAtIndex:iconCount - 1];
      }

      return cell;
      }

    • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
      {
      return [self.dirArray count];
      }

    • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
      {
      QLPreviewController *previewController = [[QLPreviewController alloc] init];
      previewController.dataSource = self;
      previewController.delegate = self;

      // start previewing the document at the current section index
      previewController.currentPreviewItemIndex = indexPath.row;
      [[self navigationController] pushViewController:previewController animated:YES];
      // [self presentViewController:previewController animated:YES completion:nil];
      }

    pragma mark - UIDocumentInteractionControllerDelegate

    • (NSString *)applicationDocumentsDirectory
      {
      return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
      }

    • (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)interactionController
      {
      return self;
      }

    pragma mark - QLPreviewControllerDataSource

    // Returns the number of items that the preview controller should preview

    • (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController
      {
      return 1;
      }

    • (void)previewControllerDidDismiss:(QLPreviewController *)controller
      {
      // if the preview dismissed (done button touched), use this method to post-process previews
      }

    // returns the item that the preview controller should preview

    • (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
      {
      NSURL *fileURL = nil;
      NSIndexPath *selectedIndexPath = [readTable indexPathForSelectedRow];
      NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *documentDir = [documentPaths objectAtIndex:0];
      NSString *path = [documentDir stringByAppendingPathComponent:[self.dirArray objectAtIndex:selectedIndexPath.row]];
      fileURL = [NSURL fileURLWithPath:path];
      return fileURL;
      }
    • (void)didReceiveMemoryWarning
      {
      [super didReceiveMemoryWarning];
      // Dispose of any resources that can be recreated.
      }

    @end

  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/xuzb/p/8669556.html
Copyright © 2011-2022 走看看