Photos 获取设备相册数据⑤

(Swift)
第一步准备:

import Photos    //导入Photos库
PHPhotoLibraryChangeObserver    //签订协议
func photoLibraryDidChange(changeInstance: PHChange) {}  //实现协议方法,第一次获取相册信息时进入(可在其中调用第二步)

第二步获取:

//  注册通知
  PHPhotoLibrary.sharedPhotoLibrary().registerChangeObserver(self)
//  获取所有系统图片信息集合体
  let allOptions = PHFetchOptions()
//  对内部元素排序(根据key可以看出这里是按照时间由远到近排序)
  allOptions.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: true)]
//  将元素集合拆解开,此时 allResults 内部是一个个的PHAsset单元
  let allResults = PHAsset.fetchAssetsWithOptions(allOptions)
// 遍历 allResults , 将视频和图片数据分开
  for i in 0..<allResults.count
  {
      let asset:PHAsset = allResults[i] as! PHAsset
      ........        //  根据 asset.mediaType 属性将asset进行分类
  }

下面这几个方法的执行环境 : asychronously on the main thread (主线程异步执行)
可先设置默认的 image 和 size 。

设置图片的 image 和 size :

 // libraryArrPhotos 设备相册中的图片数组
PHCachingImageManager.defaultManager().requestImageForAsset(libraryArrPhotos[indexPath.row] , 
                    targetSize: CGSizeZero, contentMode:
                    .AspectFit, options: nil)
    { (result: UIImage?, dictionry: Dictionary?) in   
           // 获取图片
           cell.cellImage.image = result 
    }

PHCachingImageManager.defaultManager().requestImageDataForAsset(libraryArrPhotos[indexPath.row], options: nil, resultHandler:
     { (data, string, orientation, object) in
            //  获取图片的大小(单位为B)
            var imageSize = Float(data!.length)    
      })
```
**设置视频的 image 和 size :**
```
 // libraryArrVedios 设备相册中的视频数组
PHCachingImageManager.defaultManager().requestImageForAsset(libraryArrVedios[indexPath.row] , targetSize: CGSizeZero, contentMode:
                    .AspectFit, options: nil)
      { (result: UIImage?, dictionry: Dictionary?) in
             // 获取视频截图       
             cell.cellImage.image = result 
      }

PHCachingImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler:
       { (asset, audioMix, info) in
             //  获取视频的大小(单位为B)
             let urlAsset = asset as! AVURLAsset
             let data = NSData.init(contentsOfURL: urlAsset.URL)
             let size = data?.length
       }
```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 子持莲华是景天科瓦松属多肉植物,原产于日本北海道,由牧野富太郎博士命名。“子持(こもち)”意为手牵着小孩,“莲华(...
    悠然小虾阅读 1,429评论 1 3
  • 如今的“高考”势能凶猛,能够让全社会与所有考生们“感同身受”——即便你没有跟着一起神经紧绷,但你也“被迫”关注了,...
    Jack胡阅读 2,481评论 5 17
  • 车子走走停停,犹豫不决的试探着前进,雨水拼命的拍打着玻璃,雨刷一刻不停的工作着。在蜿蜒而又狭窄的路上,陌生的记忆再...
    向风生阅读 333评论 1 1
  • 朝阳中小店清早便开门挂上淡蓝色招牌等候着买豆浆的姑娘当朝阳问候地平线在一个人的小店喝上一杯热的豆浆当眸中清澈俞明显...
    太七的猫阅读 160评论 0 6