Photos的使用

Photos對(duì)應(yīng)的基本概念

PHFetchResult -> PHCollectionList ->PHCollection -> PHAssetCollection -> PHAsset -> PHImageManager

  1. PHAsset表示相冊(cè)里的一個(gè)資源,如一張圖片或者一個(gè)視頻。

  2. PHAssetCollection表示一個(gè)相冊(cè)或者時(shí)刻,可以是系統(tǒng)相冊(cè)或者用戶自定義的相冊(cè),PHCollection是它的父類。

  3. PHCollectionList表示多個(gè)相冊(cè)PHCollection的集合。

  4. PHFetchResult是調(diào)用了PhotoKit提供的資源請(qǐng)求接口如fetchAssetCollectionsWithType函數(shù),返回的請(qǐng)求結(jié)果,PHFetchResult是一個(gè)數(shù)組,里面的元素可以是PHAsset,也可以是PHCollection,在請(qǐng)求的使用可以用PHFetchOptions定義請(qǐng)求參數(shù),比如只請(qǐng)求視頻類型或者圖片類型,請(qǐng)求結(jié)果的排序方式等。

  5. PHImageManager是對(duì)一個(gè)PHAsset進(jìn)行請(qǐng)求以獲取資源數(shù)據(jù)的接口,PHAsset里面只是資源的元數(shù)據(jù),如圖片信息,圖片大小和創(chuàng)建日期等,當(dāng)你要把圖片load出來的時(shí)候就要用到PHImageManager的requestImageForAsset來進(jìn)行加載,可以通過參數(shù)來設(shè)置加載圖片的大小尺寸等,另外使用PHCachingImageManager還可以進(jìn)行緩存加載。

獲取所有相冊(cè)

1,獲取系統(tǒng)相冊(cè)
獲取到系統(tǒng)所有的相冊(cè)
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];


typedef NS_ENUM(NSInteger, PHAssetCollectionType) {
    PHAssetCollectionTypeAlbum      = 1, //從 iTunes 同步來的相冊(cè),以及用戶在Photos中自己創(chuàng)建的相冊(cè)
    PHAssetCollectionTypeSmartAlbum = 2, //經(jīng)由相機(jī)得來的相冊(cè)
    PHAssetCollectionTypeMoment     = 3, //Photos 為我們自動(dòng)生成的時(shí)間分組的相冊(cè)
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);

typedef NS_ENUM(NSInteger, PHAssetCollectionSubtype) {
    
    // PHAssetCollectionTypeAlbum regular subtypes
    PHAssetCollectionSubtypeAlbumRegular         = 2, //用戶在 Photos 中創(chuàng)建的相冊(cè)
    PHAssetCollectionSubtypeAlbumSyncedEvent     = 3, /使用 iTunes 從 Photos 照片庫或者 iPhoto 照片庫同步過來的事件。
    PHAssetCollectionSubtypeAlbumSyncedFaces     = 4, //使用 iTunes 從 Photos 照片庫或者 iPhoto 照片庫同步的人物相冊(cè)。
    PHAssetCollectionSubtypeAlbumSyncedAlbum     = 5, //做了 AlbumSyncedEvent 應(yīng)該做的事
    PHAssetCollectionSubtypeAlbumImported        = 6, //從相機(jī)或是外部存儲(chǔ)導(dǎo)入的相冊(cè)
    
    // PHAssetCollectionTypeAlbum shared subtypes
    PHAssetCollectionSubtypeAlbumMyPhotoStream   = 100, //用戶的 iCloud 照片流
    PHAssetCollectionSubtypeAlbumCloudShared     = 101, //用戶使用 iCloud 共享的相冊(cè)
    
    // PHAssetCollectionTypeSmartAlbum subtypes
    PHAssetCollectionSubtypeSmartAlbumGeneric    = 200, //文檔解釋為非特殊類型的相冊(cè),主要包括從 iPhoto 同步過來的相冊(cè)
    PHAssetCollectionSubtypeSmartAlbumPanoramas  = 201, //相機(jī)拍攝的全景照片
    PHAssetCollectionSubtypeSmartAlbumVideos     = 202, //相機(jī)拍攝的視頻
    PHAssetCollectionSubtypeSmartAlbumFavorites  = 203, //收藏文件夾
    PHAssetCollectionSubtypeSmartAlbumTimelapses = 204, //延時(shí)視頻文件夾,同時(shí)也會(huì)出現(xiàn)在視頻文件夾中
    PHAssetCollectionSubtypeSmartAlbumAllHidden  = 205, //包含隱藏照片或視頻的文件夾
    PHAssetCollectionSubtypeSmartAlbumRecentlyAdded = 206, //相機(jī)近期拍攝的照片或視頻
    PHAssetCollectionSubtypeSmartAlbumBursts     = 207, //連拍模式拍攝的照片
    PHAssetCollectionSubtypeSmartAlbumSlomoVideos = 208, //Slomo 是 slow motion 的縮寫,高速攝影慢動(dòng)作解析,在該模式下,iOS 設(shè)備以120幀拍攝。
    PHAssetCollectionSubtypeSmartAlbumUserLibrary = 209, //這個(gè)命名最神奇了,就是相機(jī)相冊(cè),所有相機(jī)拍攝的照片或視頻都會(huì)出現(xiàn)在該相冊(cè)中,而且使用其他應(yīng)用保存的照片也會(huì)出現(xiàn)在這里。
    PHAssetCollectionSubtypeSmartAlbumSelfPortraits PHOTOS_AVAILABLE_IOS_TVOS(9_0, 10_0) = 210, //這個(gè)相冊(cè)包含了用戶使用前置攝像頭拍攝的照片和視頻
    PHAssetCollectionSubtypeSmartAlbumScreenshots PHOTOS_AVAILABLE_IOS_TVOS(9_0, 10_0) = 211, //使用設(shè)備的截屏功能生成的照片
    PHAssetCollectionSubtypeSmartAlbumDepthEffect PHOTOS_AVAILABLE_IOS_TVOS(10_2, 10_1) = 212, //在可兼容的設(shè)備上使用景深攝像模式拍的照片
    PHAssetCollectionSubtypeSmartAlbumLivePhotos PHOTOS_AVAILABLE_IOS_TVOS(10_3, 10_2) = 213, //包含所有的Live Photo資源
    PHAssetCollectionSubtypeSmartAlbumAnimated PHOTOS_AVAILABLE_IOS_TVOS(11_0, 11_0) = 214, //動(dòng)圖
    PHAssetCollectionSubtypeSmartAlbumLongExposures PHOTOS_AVAILABLE_IOS_TVOS(11_0, 11_0) = 215, //長(zhǎng)曝光
    // Used for fetching, if you don't care about the exact subtype
    PHAssetCollectionSubtypeAny = NSIntegerMax ////包含所有類型
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);

注意,獲取指定類型的相冊(cè)時(shí),主類型和子類型要匹配,不要串臺(tái)。如果不匹配,系統(tǒng)會(huì)按照 Any 子類型來處理。對(duì)于 Moment 類型,子類型使用 Any。


拿到系統(tǒng)相冊(cè)信息
[smartAlbums enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
PHAssetCollection *colletion = obj;
[smartArray addObject:colletion];
}]

2,獲取用戶自定義的相冊(cè)
獲取自定義相冊(cè)
PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil];

獲取自定義相冊(cè)信息:
[userAlbums enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
PHAssetCollection *colletion = obj;
[smartArray addObject:colletion];
}];

獲取具體的視頻或者圖片信息

先獲取具體的一個(gè)相冊(cè)
PHAssetCollection *collection = [smartArray objectAtIndex:i];
PHFetchResult *result = [PHAsset fetchAssetsInAssetCollection:collection options:nil];

獲取具體相冊(cè)里面的信息
PHAsset *asset = result[I];

信息展示

我們要通過PHCachingImageManager去獲取縮略圖
[self.imageManager requestImageForAsset: PHAsset targetSize:CELLSIZE contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

}]
獲取地址信息

__block NSString videoUrl = @"";
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[[PHImageManager defaultManager] requestAVAssetForVideo:asset
options:[PHVideoRequestOptions new] resultHandler:^(AVAsset * avAsset, AVAudioMix * audioMix, NSDictionary * info) {
videoUrl = ((AVURLAsset
)avAsset).URL.absoluteString;
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
return videoUrl;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、獲取所有照片 // 獲取所有照片相冊(cè) PHFetchResult * result = [PHAsset fe...
    MostarChow閱讀 1,160評(píng)論 0 0
  • 相冊(cè)適配 前言 由于在iOS8及以后蘋果將原有的操作相冊(cè)的ALAssetsLibrary framework替換為...
    wentianen閱讀 1,928評(píng)論 0 6
  • 1.查詢相冊(cè)使用權(quán)限PHAuthorizationStatus st = [PHPhotoLibrary auth...
    琦均煞Sylar閱讀 864評(píng)論 0 0
  • 寫在前面 在手機(jī)APP日益增加的前提下,如何更好的提升用戶的交互體驗(yàn)似乎成為衡量一個(gè)APP重要指標(biāo)。上述的感悟源于...
    Jack_lin閱讀 6,399評(píng)論 12 62
  • 紅藕香殘玉簟秋。輕解羅裳,獨(dú)上蘭舟。云中誰寄錦書來,雁字回時(shí),月滿西樓?;ㄗ燥h零水自流。一種相思,兩處閑愁。此情無...
    一縷風(fēng)吹閱讀 586評(píng)論 0 7

友情鏈接更多精彩內(nèi)容