欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年07月22日 11:18:43   投稿:lqh  
本文主要介紹IOS 共享文件,在這里給大家展示實(shí)例代碼供大家參考,希望能幫助開(kāi)發(fā)IOS的同學(xué)

前言

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

正文

  一、準(zhǔn)備

    1.1  默認(rèn) App 的文件共享是關(guān)閉的,需要在 plist 中設(shè)置啟用:

    Application supports iTunes file sharing  設(shè)置為  YES

啟用后把設(shè)備連接到 iTunes 上,在 iTunes 應(yīng)用里的文件共享就能看到你的 App 了(如果看不見(jiàn)需要斷開(kāi)重新拔插一下數(shù)據(jù)線),可以拷貝一些視頻進(jìn)去,便于測(cè)試。

    1.2  導(dǎo)入庫(kù)

      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)
    }
  }

代碼說(shuō)明:

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

      b)還有 String 的 pathExtension 和 lastPathComponent 都沒(méi)了,都改到了 NSURL 下面去了,網(wǎng)上很多資料都還是從 NSString 或者 String 取這些屬性

      c)AVURLAsset 可以取到視頻的時(shí)長(zhǎng) 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()
    }
  }

        四、用 ... 打開(kāi)

 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 {
      
    }
  }

        六、保存到相冊(cè)

 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
    }
  }

 代碼說(shuō)明:

      注意 UISaveVideoAtPathToSavedPhotosAlbum 的用法,后面 Selector 寫(xiě)得不對(duì)就會(huì)報(bào)錯(cuò)。

以上就是IOS 8 共享文件的實(shí)例代碼,有需要的朋友可以參考下。

相關(guān)文章

  • iPhoneX無(wú)導(dǎo)航欄頁(yè)面適配問(wèn)題解決方案

    iPhoneX無(wú)導(dǎo)航欄頁(yè)面適配問(wèn)題解決方案

    這篇文章主要介紹了iPhoneX無(wú)導(dǎo)航欄頁(yè)面適配問(wèn)題解決方案,原全屏適配在iPhoneX會(huì)由于安全區(qū)域的變化導(dǎo)致顯示不全,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-11-11
  • 詳解iOS AFNetworking取消正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求

    詳解iOS AFNetworking取消正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求

    這篇文章主要介紹了詳解iOS AFNetworking取消正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 詳解iOS視頻播放方式

    詳解iOS視頻播放方式

    本篇文章給大家詳細(xì)講述了詳解iOS視頻播放方式以及第三方開(kāi)元播放軟件的使用,學(xué)習(xí)下吧。
    2017-12-12
  • 詳解iOS開(kāi)發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

    詳解iOS開(kāi)發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式

    這篇文章主要介紹了iOS開(kāi)發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式,示例代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2015-12-12
  • IOS MenuViewController實(shí)現(xiàn)彈出菜單效果

    IOS MenuViewController實(shí)現(xiàn)彈出菜單效果

    這篇文章主要介紹了IOS MenuViewController實(shí)現(xiàn)彈出菜單效果,實(shí)現(xiàn)一個(gè)從下移動(dòng)上來(lái)的彈出菜單,背景逐漸變深,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • iOS 10 使用相機(jī)相簿閃退的bug修正方法

    iOS 10 使用相機(jī)相簿閃退的bug修正方法

    iOS 10 中使用相機(jī)相簿閃退的問(wèn)題需要我們?cè)贗nfo.plist 加入指定的 key,下面小編給大家介紹下,一起看看吧
    2016-10-10
  • 如何利用FutureBuilder提高開(kāi)發(fā)效率

    如何利用FutureBuilder提高開(kāi)發(fā)效率

    這篇文章主要給大家介紹了關(guān)于如何利用FutureBuilder提高開(kāi)發(fā)效率的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • iOS代碼瘦身實(shí)踐之如何刪除無(wú)用的類(lèi)

    iOS代碼瘦身實(shí)踐之如何刪除無(wú)用的類(lèi)

    這篇文章主要給大家介紹了關(guān)于iOS代碼瘦身實(shí)踐之如何刪除無(wú)用的類(lèi),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家各位iOS開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 淺談iOS 對(duì)于block的一點(diǎn)理解

    淺談iOS 對(duì)于block的一點(diǎn)理解

    本篇文章主要介紹了iOS 對(duì)于block的一點(diǎn)理解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • IOS 開(kāi)發(fā)之UILabel 或者 UIButton加下劃線鏈接

    IOS 開(kāi)發(fā)之UILabel 或者 UIButton加下劃線鏈接

    這篇文章主要介紹了IOS 開(kāi)發(fā)之UILabel 或者 UIButton加下劃線鏈接的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評(píng)論