PHAssetCollection

一个照片资源分类的表现形式,例如一个时刻,用户创建的相册或者智能相册。

一、概述

Photos框架中,集合对象(包括资源集合)不会直接使用它们的成员对象,并且也没有其他的对象来直接使用集合对象。为了获取一个资源集合的成员,应使用PHAsset的类方法,例如+ (PHFetchResult<PHAsset *> *)fetchAssetsInAssetCollection:(PHAssetCollection *)assetCollection options:(PHFetchOptions *)options;。为了查找资源集合,应使用下面的“获取资源集合”中的方法。

苹果爸爸的文档库中还有一个关于请求权限的重要说明,我已经放在了这里

资源集合列表一样,资源集合是不可变的。想要创建、重命名、删除资源集合,或者想要在一个资源集合中添加成员、移除成员、对成员重新排序,应在一个照片库的变化回调中创建一个PHAssetCollectionChangeRequest对象。想要更多的关于改变请求和使用变化回调更新照片库,请查看PHPhotoLibrary

二、内容


1. 获取资源集合

+ (PHFetchResult<PHAssetCollection *> *)fetchAssetCollectionsWithLocalIdentifiers:(NSArray<NSString *> *)identifiers options:(nullable PHFetchOptions *)options;

通过给定的唯一标识(localIdentifier属性)查找对应的资源集合。如果没有对应的资源集合则返回空的获取结果。

+ (PHFetchResult<PHAssetCollection *> *)fetchAssetCollectionsWithType:(PHAssetCollectionType)type subtype:(PHAssetCollectionSubtype)subtype options:(nullable PHFetchOptions *)options;

查找给定类型和给定子类型的资源集合。如果没有对应的资源集合则返回空的获取结果。

PHAssetCollectionType

typedef NS_ENUM(NSInteger, PHAssetCollectionType) {
    PHAssetCollectionTypeAlbum      = 1, // 在 照片 应用中创建的相簿或者通过iTunes同步的在iOS设备上显示的相簿
    PHAssetCollectionTypeSmartAlbum = 2, // 照片 应用中内置的相簿
    PHAssetCollectionTypeMoment     = 3, // 照片 应用中的 时刻
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);

PHAssetCollectionSubtype

typedef NS_ENUM(NSInteger, PHAssetCollectionSubtype) {
    // PHAssetCollectionTypeAlbum regular subtypes
    PHAssetCollectionSubtypeAlbumRegular         = 2, // 在 相册 应用中创建的相簿
    PHAssetCollectionSubtypeAlbumSyncedEvent     = 3, // 从iPhone中同步到设备的 事件 
    PHAssetCollectionSubtypeAlbumSyncedFaces     = 4, // 从iPhone中同步到设备的 面孔(人物)
    PHAssetCollectionSubtypeAlbumSyncedAlbum     = 5, // 从iPhone中同步到设备的相簿
    PHAssetCollectionSubtypeAlbumImported        = 6, // 从相机或者外部存储设备中导入的相簿
    // PHAssetCollectionTypeAlbum shared subtypes
    PHAssetCollectionSubtypeAlbumMyPhotoStream   = 100, // 用户自己的iCloud照片流
    PHAssetCollectionSubtypeAlbumCloudShared     = 101, // 一个iCloud共享照片流
    // PHAssetCollectionTypeSmartAlbum subtypes
    PHAssetCollectionSubtypeSmartAlbumGeneric    = 200, // 没有指定子类型的智能相簿
    PHAssetCollectionSubtypeSmartAlbumPanoramas  = 201, // 包含了照片库中所有全景照片的智能相簿——全景照片
    PHAssetCollectionSubtypeSmartAlbumVideos     = 202, // 包含了照片库中所有视频的智能相簿——视频
    PHAssetCollectionSubtypeSmartAlbumFavorites  = 203, // 包含了照片库中所有用户标记为喜欢的资源的智能相簿——个人收藏
    PHAssetCollectionSubtypeSmartAlbumTimelapses = 204, // 包含了照片库中所有延时视频的智能相簿——慢动作
    PHAssetCollectionSubtypeSmartAlbumAllHidden  = 205, // 包含了 照片 应用中所有从 时刻 中隐藏的资源的智能相簿——
    PHAssetCollectionSubtypeSmartAlbumRecentlyAdded = 206, // 包含了所有最近添加到图片库的资源的智能相簿——
    PHAssetCollectionSubtypeSmartAlbumBursts     = 207, // 包含了所有连拍的智能相簿——连拍快照
    PHAssetCollectionSubtypeSmartAlbumSlomoVideos = 208, // 包含了 照片 应用中所有慢动作视频的智能相簿——慢动作
    PHAssetCollectionSubtypeSmartAlbumUserLibrary = 209, // 包含了所有用户自己的图库的资源的智能相簿(而不是来自于iCloud共享流的资源)
    PHAssetCollectionSubtypeSmartAlbumSelfPortraits PHOTOS_AVAILABLE_IOS_TVOS(9_0, 10_0) = 210, // 包含了所有使用前置摄像头拍摄的资源的智能相册——自拍
    PHAssetCollectionSubtypeSmartAlbumScreenshots PHOTOS_AVAILABLE_IOS_TVOS(9_0, 10_0) = 211, // 包含了所有使用屏幕截图的资源的智能相册——屏幕快照
    PHAssetCollectionSubtypeSmartAlbumDepthEffect PHOTOS_AVAILABLE_IOS_TVOS(10_2, 10_1) = 212, // 包含了所有兼容设备上使用景深效果拍摄的资源的智能相册
    PHAssetCollectionSubtypeSmartAlbumLivePhotos PHOTOS_AVAILABLE_IOS_TVOS(10_3, 10_2) = 213, // 包含了所有Live Photo的智能相册——Live Photo
    // Used for fetching, if you don't care about the exact subtype
    PHAssetCollectionSubtypeAny = NSIntegerMax // 所有可能的子类型
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
+ (PHFetchResult<PHAssetCollection *> *)fetchAssetCollectionsContainingAsset:(PHAsset *)asset withType:(PHAssetCollectionType)type options:(nullable PHFetchOptions *)options;

查找给定类型并且包含给定资源资源集合。如果没有对应的资源集合则返回空的获取结果。

+ (PHFetchResult<PHAssetCollection *> *)fetchAssetCollectionsWithALAssetGroupURLs:(NSArray<NSURL *> *)assetGroupURLs options:(nullable PHFetchOptions *)options;

通过Assets Library框架提供的URLs查找对应的资源集合。如果没有对应的资源集合则返回空的获取结果。
Assets Library框架在iOS 8.0之后就不建议被使用了。

+ (PHFetchResult<PHAssetCollection *> *)fetchMomentsInMomentList:(PHCollectionList *)momentList options:(nullable PHFetchOptions *)options;

获取指定的时刻列表中的时刻。如果没有对应的资源集合则返回空的获取结果。
照片应用会在拍摄时自动创建对应的时刻地点的分组,并创建时刻列表来组合相关的时刻时刻列表有两个子类型:一群相关时刻的分组,还有一年内所有时刻的群组。

+ (PHFetchResult<PHAssetCollection *> *)fetchMomentsWithOptions:(nullable PHFetchOptions *)options;

获取在照片应用中看到的时刻一样的资源集合。


2. 读取资源集合的数据

@property (nonatomic, assign, readonly) PHAssetCollectionType assetCollectionType;

资源集合的类型,例如一个相簿或者一个时刻。

@property (nonatomic, assign, readonly) PHAssetCollectionSubtype assetCollectionSubtype;

资源集合的子类型。使用子类型在同类型的集合之间进行细微区别。

@property (nonatomic, assign, readonly) NSUInteger estimatedAssetCount;

资源集合中资源的估算数量。
这个数量可能与当前集合中的资源数不一样。想要获得最新的资源数量请使用+ (PHFetchResult<PHAsset *>*)fetchAssetsInAssetCollection:(PHAssetCollection *)assetCollection options:(PHFetchOptions *)options;获取集合中的资源然后读取获取结果中的count属性。
如果对于某个集合来说资源数量是不可用的属性,则则个属性的值是NSNotFound

@property (nonatomic, strong, readonly, nullable) NSDate *startDate;

资源集合中所有资源中最早的一个的创建日期。
这个属性仅在资源集合的类型为PHAssetCollectionTypeMoment时有效。对于其他类型,这个属性的值为nil

@property (nonatomic, strong, readonly, nullable) NSDate *endDate;

资源集合中所有资源中距离现在时间最近的一个的创建日期。
这个属性仅在资源集合的类型为PHAssetCollectionTypeMoment时有效。对于其他类型,这个属性的值为nil

@property (nonatomic, strong, readonly, nullable) CLLocation *approximateLocation;

资源集合中所有资源的定位地点。
照片应用会在拍摄时自动创建对应的时刻地点的分组,同一时刻照片资源的地点应该非常接近,所以这个属性表示的是一个大致的共有的定位地点。
这个属性仅在资源集合的类型为PHAssetCollectionTypeMoment时有效。对于其他类型,这个属性的值为nil

@property (nonatomic, strong, readonly) NSArray<NSString *> *localizedLocationNames;

资源集合中所有资源的定位地点的名称。
照片应用会在拍摄时自动创建对应的时刻地点的分组,同一时刻照片资源的地点应该非常接近,但有可能有多个地点名称,所以这个属性表示的是一个定位地点名称组成的数组。
这个属性仅在资源集合的类型为PHAssetCollectionTypeMoment时有效。对于其他类型,这个属性的值为nil


3. 创建临时资源(asset)集合

+ (PHAssetCollection *)transientAssetCollectionWithAssets:(NSArray<PHAsset *> *)assets title:(nullable NSString *)title;
  • assets NSArray<PHAsset *> - PHAsset对象组成的数组,要包含的资源。
  • title NSString - 临时资源集合的标题。

创建一个包含给定资源的临时资源集合。
临时的资源集合。不会被保存,也不会被存储到iCloud中,更不会在相册应用中和其他使用Photos框架的应用显示。

+ (PHAssetCollection *)transientAssetCollectionWithAssetFetchResult:(PHFetchResult<PHAsset *> *)fetchResult title:(nullable NSString *)title;

创建一个包含获取结果中的资源的临时资源集合。
获取结果中至少要包含一个PHAsset对象。
临时的资源集合。不会被保存,也不会被存储到iCloud中,更不会在相册应用中和其他使用Photos框架的应用显示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 父类:NSObject 展示一张Live Photo——这个照片包含了拍摄时刻之前以及之后的动作和声音。 一、概述...
    Shmily落墨阅读 6,396评论 2 6
  • demo下载地址在最下方 一、AssetsLibrary iOS提供的AssetsLibrary是用来读取和操作本...
    Archer_bling阅读 5,974评论 19 23
  • 相册适配 前言 由于在iOS8及以后苹果将原有的操作相册的ALAssetsLibrary framework替换为...
    wentianen阅读 1,789评论 0 6
  • 父类:PHCollection 包含了一组Photos的资源集合的表现形式,例如一个时刻中的“年”或者用户创建的相...
    Shmily落墨阅读 1,996评论 0 1
  • 写在前面 在手机APP日益增加的前提下,如何更好的提升用户的交互体验似乎成为衡量一个APP重要指标。上述的感悟源于...
    Jack_lin阅读 6,217评论 12 62