国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

Swift 共享文件操作小結(iOS 8 +)

2020-07-26 03:18:04
字體:
來源:轉載
供稿:網友

前言

  適用于 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 共享文件的實例代碼,有需要的朋友可以參考下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大英县| 屏东市| 诸暨市| 临湘市| 环江| 梁山县| 临沧市| 万年县| 余姚市| 镇远县| 杨浦区| 安陆市| 陆河县| 嘉峪关市| 丹阳市| 那坡县| 宁乡县| 台州市| 郸城县| 滨海县| 华阴市| 揭东县| 浑源县| 扶绥县| 读书| 杭州市| 新龙县| 石楼县| 通河县| 南漳县| 海丰县| 凌云县| 新野县| 上饶市| 铜梁县| 阳江市| 邯郸县| 富宁县| 温泉县| 长宁区| 松原市|