iOS Photos详解

PHCollection

2017-05-02  本文已影响244人  Shmily落墨

Photos资源的集合和集合列表的抽象超类(父类)。

一、概述

你不应该创建或直接使用这个类的实例。而是应该使用这个类的两个子类中的一个,PHAssetCollectionPHCollectionList

苹果爸爸官网文档里面有这样一段:

重要
访问或修改照片库需要用户明确的授权。第一次调用下面“获取集合”中的任何一个方法时,Photos会自动提示用户授权。(或者你也可以调用PHPhotoLibrary+ (void)requestAuthorization:(void(^)(PHAuthorizationStatus status))handler;方法在一个你需要的时刻提示用户授权。)
你的应用程序的Info.plist文件必须给NSPhotoLibraryUsageDescription 键提供一个值来告诉用户为什么你的用户要请求相册资源。iOS 10.0之后的系统中,如果你的应用的Info.plist文件中没有这个键值,那么你的应用将会直接崩溃。

所以告诉我们在Info.plist文件中一定要设置这个键值。

二、内容

1. 获取集合

+ (PHFetchResult<PHCollection *> *)fetchCollectionsInCollectionList:(PHCollectionList *)collectionList options:(nullable PHFetchOptions *)options;

从给定的集合列表中获取集合。如果没有,则返回一个空的PHFetchResult类型的实例。
返回的PHFetchResult对象包含了源集合列表中的所有集合,如果想要更明确的获取一些资源集合,可以设置options

+ (PHFetchResult<PHCollection *> *)fetchTopLevelUserCollectionsWithOptions:(nullable PHFetchOptions *)options;

照片库的顶层获取用户创建的相簿和文件夹。如果没有则返回一个空的PHFetchResult类型的实例。

2. 读取集合数据

@property (nonatomic, strong, readonly, nullable) NSString *localizedTitle;

集合的本机名称。
用户创建的相簿或文件夹则返回用户设置的名字,系统自带的文件夹则返回原始的系统默认的名字。

3. 确定集合容量

@property (nonatomic, assign, readonly) BOOL canContainAssets;

该集合是否可以包含资源。即该集合是照片的集合还是集合的集合。
如果返回YES,则该集合是PHAssetCollection类的实例。
如果返回NO,则该集合是PHCollectionList类的实例。

@property (nonatomic, assign, readonly) BOOL canContainCollections;

该集合是否可以包含集合。即该集合是照片的集合还是集合的集合。
如果返回YES,则该集合是PHCollectionList类的实例。
如果返回NO,则该集合是PHAssetCollection类的实例。

- (BOOL)canPerformEditOperation:(PHCollectionEditOperation)anOperation;

返回该集合是否支持给定的操作。
如果一个资源集合或者集合列表支持编辑,你可以创建一个PHAssetCollectionChangeRequest或者PHCollectionListChangeRequest对象代替一个PHPhotoLibrary更改回调来提交变更。

PHCollectionEditOperation

typedef NS_ENUM(NSInteger, PHCollectionEditOperation) {
    PHCollectionEditOperationDeleteContent    = 1, // 删除集合中包含的内容,删除的东西会永久的从照片库中删除
    PHCollectionEditOperationRemoveContent    = 2, // 移除集合中包含的内容,但移除的东西不会从照片库中删除
    PHCollectionEditOperationAddContent       = 3, // 从其他的集合中添加内容
    PHCollectionEditOperationCreateContent    = 4, // 创建新的内容或者从其他的容器中复制内容到这个容器中
    PHCollectionEditOperationRearrangeContent = 5, // 改变内容的顺序
    PHCollectionEditOperationDelete           = 6, // 删除容器但不删除内容
    PHCollectionEditOperationRename           = 7, // 重命名容器的名字
} PHOTOS_AVAILABLE_IOS_TVOS(8_0, 10_0);
上一篇 下一篇

猜你喜欢

热点阅读