本篇主要讲解PHCollection以及他的两个子类PHAssetCollection和PHCollectionList。
涉及到的重点类
- PHCollection
- PHAssetCollection
- PHCollectionList
- PHCollectionEditOperation
- PHFetchOptions
- PHFetchResult
- PHAssetSourceType
一张图看懂PHCollection
PHCollection,指的是包含了一组Photos的资源集合的表现形式,例如一个时刻中的“年”或者用户创建的相簿文件夹。
作为Photos的抽象超类,本身不会有实例化的意义,我们主要关注他的两个子类:资源的集合PHAssetCollection和集合列表PHCollectionList。
- 一个PHAssetCollection对象代表了一个照片或者视频资源的集合,比如说一个相簿,一个时刻,或者是共享相簿。
- 一个PHCollectionList对象代表了一个包含了其他集合的集合,比如说一个包含许多相簿的文件夹或者一个包含一年所有时刻的集合。
一张图看懂PHAssetCollection
代表了一个照片或者视频资源的集合,比如说一个相簿,一个时刻,或者是共享相簿。
其中两个重要的资源集合类型PHAssetCollectionType和PHAssetCollectionSubtype。PHAssetCollectionSubtype与PHAssetCollectionType相对应。
PHAssetCollectionType
typedef NS_ENUM(NSInteger, PHAssetCollectionType) {
PHAssetCollectionTypeAlbum = 1, //在"照片"应用中创建的相簿或者通过iTunes同步的在iOS设备上显示的相簿
PHAssetCollectionTypeSmartAlbum = 2, //照片 应用中内置的相簿
PHAssetCollectionTypeMoment API_DEPRECATED("Will be removed in a future release", ios(8, 13), tvos(10, 13)) API_UNAVAILABLE(macos) = 3, //照片 应用中的 时刻 iOS13后会弃用
};
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);
一张图看懂PHCollectionList
包含了一组Photos的资源集合的表现形式,例如一个时刻中的“年”或者用户创建的相簿文件夹。整体的方法和属性基本跟PHAssetCollection差不多。
PHCollectionListType
typedef NS_ENUM(NSInteger, PHCollectionListType) {
PHCollectionListTypeMomentList = 1, // 包含了PHAssetCollectionTypeMoment类型的资源集合的列表
PHCollectionListTypeFolder = 2, // 包含了PHAssetCollectionTypeAlbum类型或PHAssetCollectionTypeSmartAlbum类型的资源集合的列表
PHCollectionListTypeSmartFolder = 3, // 同步到设备的智能文件夹的列表
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
PHCollectionListSubtype
typedef NS_ENUM(NSInteger, PHCollectionListSubtype) {
// PHCollectionListTypeMomentList的子类型
PHCollectionListSubtypeMomentListCluster = 1, // 时刻
PHCollectionListSubtypeMomentListYear = 2, // 年度
// PHCollectionListTypeFolder的子类型
PHCollectionListSubtypeRegularFolder = 100, // 包含了其他文件夹或者相簿的文件夹
// PHCollectionListTypeSmartFolder的子类型
PHCollectionListSubtypeSmartFolderEvents = 200, // 包含了一个或多个从iPhone同步的事件的智能文件夹
PHCollectionListSubtypeSmartFolderFaces = 201, // 包含了一个或多个从iPhone同步的面孔(人物)的智能文件夹
// 如果你不关心子类型是什么,则使用下面这个
PHCollectionListSubtypeAny = NSIntegerMax
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);