手机
当前位置:查字典教程网 >编程开发 >IOS开发 >Swift 共享文件操作小结(iOS 8 +)
Swift 共享文件操作小结(iOS 8 +)
摘要:前言适用于iOS8+本地共享文件列表正文一、准备1.1默认App的文件共享是关闭的,需要在plist中设置启用:Applicationsup...

前言

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

正文

一、准备

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 > 0 { let documentsDirectory = paths[0] 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 = 0 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 写得不对就会报错。

以上就是IOS 8 共享文件的实例代码,有需要的朋友可以参考下。

【Swift 共享文件操作小结(iOS 8 +)】相关文章:

ios触屏事件指南

iOS4下实现UIView动画结束后调用

IOS实现选择城市后跳转Tabbar效果

iOS开发中UIWebView的加载本地数据的三种方式

简单讲解iOS应用开发中的MD5加密的相关使用

IOS基础学习UIButton使用详解

全面解析iOS应用中自定义UITableViewCell的方法

Objective-C中使用NSString类操作字符串的方法小结

iOS本地推送简单实现代码

iOS通过http post上传图片

精品推荐
分类导航