iOS_DeviOS Photos详解IOS知识积累

PHAssetCollection

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

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

一、概述

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;

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读