(Swift)
第一步準(zhǔn)備:
import Photos //導(dǎo)入Photos庫
PHPhotoLibraryChangeObserver //簽訂協(xié)議
func photoLibraryDidChange(changeInstance: PHChange) {} //實(shí)現(xiàn)協(xié)議方法,第一次獲取相冊(cè)信息時(shí)進(jìn)入(可在其中調(diào)用第二步)
第二步獲?。?/strong>
// 注冊(cè)通知
PHPhotoLibrary.sharedPhotoLibrary().registerChangeObserver(self)
// 獲取所有系統(tǒng)圖片信息集合體
let allOptions = PHFetchOptions()
// 對(duì)內(nèi)部元素排序(根據(jù)key可以看出這里是按照時(shí)間由遠(yuǎn)到近排序)
allOptions.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: true)]
// 將元素集合拆解開,此時(shí) allResults 內(nèi)部是一個(gè)個(gè)的PHAsset單元
let allResults = PHAsset.fetchAssetsWithOptions(allOptions)
// 遍歷 allResults , 將視頻和圖片數(shù)據(jù)分開
for i in 0..<allResults.count
{
let asset:PHAsset = allResults[i] as! PHAsset
........ // 根據(jù) asset.mediaType 屬性將asset進(jìn)行分類
}
下面這幾個(gè)方法的執(zhí)行環(huán)境 : asychronously on the main thread (主線程異步執(zhí)行)
可先設(shè)置默認(rèn)的 image 和 size 。
設(shè)置圖片的 image 和 size :
// libraryArrPhotos 設(shè)備相冊(cè)中的圖片數(shù)組
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)
})
```
**設(shè)置視頻的 image 和 size :**
```
// libraryArrVedios 設(shè)備相冊(cè)中的視頻數(shù)組
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
}
```