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