- 父類:PHObject
Photos的資源的集合和集合列表的抽象超類(父類)。
一、概述
你不應(yīng)該創(chuàng)建或直接使用這個(gè)類的實(shí)例。而是應(yīng)該使用這個(gè)類的兩個(gè)子類中的一個(gè),PHAssetCollection或PHCollectionList。
- 一個(gè)PHAssetCollection對(duì)象代表了一個(gè)照片或者視頻資源的集合,比如說(shuō)一個(gè)相簿,一個(gè)時(shí)刻,或者是共享相簿。
- 一個(gè)PHCollectionList對(duì)象代表了一個(gè)包含了其他集合的集合,比如說(shuō)一個(gè)包含許多相簿的文件夾或者一個(gè)包含一年所有時(shí)刻的集合。
蘋果爸爸官網(wǎng)文檔里面有這樣一段:
重要
訪問或修改照片庫(kù)需要用戶明確的授權(quán)。第一次調(diào)用下面“獲取集合”中的任何一個(gè)方法時(shí),Photos會(huì)自動(dòng)提示用戶授權(quán)。(或者你也可以調(diào)用PHPhotoLibrary的+ (void)requestAuthorization:(void(^)(PHAuthorizationStatus status))handler;方法在一個(gè)你需要的時(shí)刻提示用戶授權(quán)。)
你的應(yīng)用程序的Info.plist文件必須給NSPhotoLibraryUsageDescription 鍵提供一個(gè)值來(lái)告訴用戶為什么你的用戶要請(qǐng)求相冊(cè)資源。iOS 10.0之后的系統(tǒng)中,如果你的應(yīng)用的Info.plist文件中沒有這個(gè)鍵值,那么你的應(yīng)用將會(huì)直接崩潰。
所以告訴我們?cè)?code>Info.plist文件中一定要設(shè)置這個(gè)鍵值。
二、內(nèi)容
1. 獲取集合
+ (PHFetchResult<PHCollection *> *)fetchCollectionsInCollectionList:(PHCollectionList *)collectionList options:(nullable PHFetchOptions *)options;
- collectionList PHCollectionList - 源集合列表
- options PHFetchOptions - 對(duì)獲取結(jié)果進(jìn)行篩選和排序
從給定的集合列表中獲取集合。如果沒有,則返回一個(gè)空的PHFetchResult類型的實(shí)例。
返回的PHFetchResult對(duì)象包含了源集合列表中的所有集合,如果想要更明確的獲取一些資源集合,可以設(shè)置options。
+ (PHFetchResult<PHCollection *> *)fetchTopLevelUserCollectionsWithOptions:(nullable PHFetchOptions *)options;
從照片庫(kù)的頂層獲取用戶創(chuàng)建的相簿和文件夾。如果沒有則返回一個(gè)空的PHFetchResult類型的實(shí)例。
2. 讀取集合數(shù)據(jù)
@property (nonatomic, strong, readonly, nullable) NSString *localizedTitle;
集合的本機(jī)名稱。
用戶創(chuàng)建的相簿或文件夾則返回用戶設(shè)置的名字,系統(tǒng)自帶的文件夾則返回原始的系統(tǒng)默認(rèn)的名字。
3. 確定集合容量
@property (nonatomic, assign, readonly) BOOL canContainAssets;
該集合是否可以包含資源。即該集合是照片的集合還是集合的集合。
如果返回YES,則該集合是PHAssetCollection類的實(shí)例。
如果返回NO,則該集合是PHCollectionList類的實(shí)例。
@property (nonatomic, assign, readonly) BOOL canContainCollections;
該集合是否可以包含集合。即該集合是照片的集合還是集合的集合。
如果返回YES,則該集合是PHCollectionList類的實(shí)例。
如果返回NO,則該集合是PHAssetCollection類的實(shí)例。
- (BOOL)canPerformEditOperation:(PHCollectionEditOperation)anOperation;
返回該集合是否支持給定的操作。
如果一個(gè)資源集合或者集合列表支持編輯,你可以創(chuàng)建一個(gè)PHAssetCollectionChangeRequest或者PHCollectionListChangeRequest對(duì)象代替一個(gè)PHPhotoLibrary的更改回調(diào)來(lái)提交變更。
PHCollectionEditOperation
typedef NS_ENUM(NSInteger, PHCollectionEditOperation) {
PHCollectionEditOperationDeleteContent = 1, // 刪除集合中包含的內(nèi)容,刪除的東西會(huì)永久的從照片庫(kù)中刪除
PHCollectionEditOperationRemoveContent = 2, // 移除集合中包含的內(nèi)容,但移除的東西不會(huì)從照片庫(kù)中刪除
PHCollectionEditOperationAddContent = 3, // 從其他的集合中添加內(nèi)容
PHCollectionEditOperationCreateContent = 4, // 創(chuàng)建新的內(nèi)容或者從其他的容器中復(fù)制內(nèi)容到這個(gè)容器中
PHCollectionEditOperationRearrangeContent = 5, // 改變內(nèi)容的順序
PHCollectionEditOperationDelete = 6, // 刪除容器但不刪除內(nèi)容
PHCollectionEditOperationRename = 7, // 重命名容器的名字
} PHOTOS_AVAILABLE_IOS_TVOS(8_0, 10_0);