前言

  适用于 iOS 8 + 本地共享文件列表

声明
  欢迎转载,但请保留文章原始出处:)
  博客园:http://www.cnblogs.com
  农民伯伯: http://over140.cnblogs.com

正文

  一、准备

    1.1  默认 App 的文件共享是关闭的,需要在 plist 中设置启用:

    Application supports iTunes file sharing  设置为  YES

      启用后把设备连接到 iTunes 上,在 iTunes 应用里的文件共享就能看到你的 App 了(如果看不见需要断开重新拔插一下数据线),可以拷贝一些视频进去,便于测试。

    1.2  导入库

      Photos.framework

      AVKit.framework  用于播放视频    

  二、获取视频列表

    private let VIDEO_EXTENSIONS = [
".MOV", ".MP4"
] private var fileManager = NSFileManager.defaultManager() func loadVideos() {
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
if paths.count > {
let documentsDirectory = paths[] as String
let documentUrl = NSURL(fileURLWithPath: documentsDirectory, isDirectory: true)
do {
documentUrl.path
let files = try fileManager.contentsOfDirectoryAtPath(documentsDirectory)
for file in files {
fetchVideos(documentUrl.URLByAppendingPathComponent(file).path ?? "")
}
} catch { } self.tableView.reloadData()
}
} func fetchVideos(path: String) {
var isDir: ObjCBool = false
if !path.isEmpty && fileManager.fileExistsAtPath(path, isDirectory: &isDir) {
if isDir {
do {
let files = try fileManager.contentsOfDirectoryAtPath(path)
for file in files {
fetchVideos(file)
}
} catch {
}
} else {
var file = File(path: path)
if file.isValid() && isVideoFileExtension(file.fileExtension.uppercaseString) {
do {
if let attr: NSDictionary = try fileManager.attributesOfItemAtPath(path) {
file.fileSize = attr.fileSize()
}
} catch {
}
videos.append(file)
}
}
}
} func isVideoFileExtension(ext: String) -> Bool {
for videoExtension in VIDEO_EXTENSIONS {
if ext == videoExtension {
return true
}
}
return false
} struct File {
var fileExtension = ""
var fileName = ""
var path = ""
var assert: AVURLAsset?
var url: NSURL!
var fileSize: UInt64 = init(path: String) {
self.path = path
self.url = NSURL(fileURLWithPath: path)
self.fileName = url.lastPathComponent ?? ""
self.fileExtension = "." + (url.pathExtension ?? "")
} func isValid() -> Bool {
return !(fileName.isEmpty || fileExtension.isEmpty)
}
}

    代码说明:

      a)需要注意一些 swift 的用法,例如 fileExistsAtPath 的用法

      b)还有 String 的 pathExtension 和 lastPathComponent 都没了,都改到了 NSURL 下面去了,网上很多资料都还是从 NSString 或者 String 取这些属性

      c)AVURLAsset 可以取到视频的时长

        CMTimeGetSeconds(AVURLAsset(URL: file.url, options: nil).duration)

  三、播放视频

    func play(file: File) {
let player = AVPlayer(URL: file.url)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.presentViewController(playerViewController, animated: true) {
playerViewController.player?.play()
}
}

  四、用 ... 打开

    func openIn(file: File, indexPath: NSIndexPath) {
let document = UIDocumentInteractionController(URL: file.url)
let rect = self.tableView.rectForRowAtIndexPath(indexPath)
document.presentOpenInMenuFromRect(rect, inView: self.tableView, animated: true)
}

  五、删除视频

    func delete(file: File, indexPath: NSIndexPath) {
do {
try fileManager.removeItemAtPath(file.path)
videos.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
} catch { }
}

  六、保存到相册

    func saveToCameraRoll(file: File, indexPath: NSIndexPath) {
if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(file.path) {
UISaveVideoAtPathToSavedPhotosAlbum(file.path, self, "image:didFinishSavingWithError:contextInfo:", nil)
} else {
// save faild
}
} func image(image: UIImage, didFinishSavingWithError error: NSErrorPointer, contextInfo:UnsafePointer<Void>) {
if error == nil {
// save success
} else {
// save faild
}
}

    代码说明:

      注意 UISaveVideoAtPathToSavedPhotosAlbum 的用法,后面 Selector 写得不对就会报错。

结束

  一口气写完一个功能好爽

【Swift 2.1】共享文件操作小结(iOS 8 +)的更多相关文章

  1. swift语言之多线程操作和操作队列(下)———坚持51天吃掉大象(写技术文章)

    欢迎有兴趣的朋友,参与我的美女同事发起的活动<51天吃掉大象>,该美女真的很疯狂,希望和大家一起坚持51天做一件事情,我加入这个队伍,希望坚持51天每天写一篇技术文章.关注她的微信公众号: ...

  2. java导入导出excel常用操作小结及简单示例

    POI中常用设置EXCEL的操作小结: 操作excel如下 HSSFWorkbook wb = new HSSFWorkbook();  //创建一个webbook,对应一个Excel文件 HSSFS ...

  3. js,jQuery数组常用操作小结

    一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...

  4. 使用samba进行共享文件操作步骤

    使用samba进行共享文件操作步骤 1.验证方式 设置用户访问samba server的验证方式,一共有四种验证方式. a. share:用户访问samba server不需要提供用户名和密码,安全性 ...

  5. EntityFramework中几种操作小结

    目前项目中使用到的EntityFramework中几种操作小结,先标记下.没有详细介绍,后续有空的话再补充一些并完善一下. 列中加入RowVersion时间戳 public class Product ...

  6. 极光推送小结 - iOS

    此次即友盟分享小结(友盟分享小结 - iOS)之后对推送也进行了一版优化.此次分享内容依然基于已经成功集成 SDK 后 code 层级部分. 注:此次分享基于 SDK 3.1.0,若版本相差较大,仅供 ...

  7. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  8. 树莓派-4WD智能小车操作小结

    树莓派-4WD智能小车操作小结 树莓派4B-4WD智能小车,双层结构,第一层结构为:小车扩展板(底层)+树莓派主板,通过铜柱隔离固定,小车扩展板相当于计算机的外设扩展板:上面一层为第二层,是三个舵机承 ...

  9. iOS - Swift 与 Objective-C 互相操作

    前言 在 Swift 语言中,我们可以使用 Objective-C.C 语言编写代码,我们可以导入任意用 Objective-C 写的 Cocoa 平台框架.Objective-C 框架或 C 类库. ...

随机推荐

  1. 【重磅开源】Hawk-数据抓取工具:简明教程

    Hawk-数据抓取工具:简明教程 标签(空格分隔): Hawk Hawk: Advanced Crawler& ETL tool written in C#/WPF 1.软件介绍 HAWK是一 ...

  2. 窥探Swift之类的继承与类的访问权限

    上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swift中的类开了个头.关于类的内容还有很多,今天就来搞一下类中的继承以及类的访问权限.说到类的继承,接触过 ...

  3. 关于在Linux64位下安装xampp

    网上关于这个主题的内容比较少,所以就写一下按装后的心得.之前一直在windows下用xampp,想在Linux下也体验一把,可是自己的Linux装的是64位的在XAMPP的官网上http://www. ...

  4. input(file)按钮美化

    <!DOCTYPE HTML> <html> <body> <input type="file" id="upload" ...

  5. DDD 主题交流会总结及计划

    思维碰撞才能更加进步 2015年5月16日(上周六),我们举行了一次 DDD 主题的交流会,参会者主要是 ENode 群友.以及部分园友,为什么要搞这次交流会?原因很简单,就是希望可以提供对 DDD ...

  6. php左侧分类列表显示菜单

    <!DOCTYPE> <html> <head> <meta http-equiv="content-type" content=&quo ...

  7. sublime text 3 配置php开发环境

    一.安装Sublime Text 3 官方网址:http://www.sublimetext.com/3 一定要选择ST3,而不是ST2,3比2好用,真的,后面你就知道了. 选择对应的版本安装.完事后 ...

  8. 不行,受不了了,我要记录下这个 bug

    我们在使用 java 中使用线程 Thread 的时候,在 run(){  } 里面的如果要传递参数给函数,一般,编译系统都会提示我们,要将这个参数尽可能地设置为 final,即常量,一旦定义就不能再 ...

  9. linux中的通配符与正则表达式

    在linux中,有通配符及正则表达式,那么什么是通配符和正则表达式,什么时候用?   通配符 它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通 ...

  10. iOS通过ARC管理内存(内容根据iOS编程编写)

    栈 当程序执行某个方法(或函数)时,会从内存中一个叫栈的区域分配一块内存空间,这块内存空间我们叫帧.帧负责保护程序在方法内声明的变量的值.在方法内声明的变量我们称之为局部变量. 当我们的程序开始启动, ...