PHAssetCollection

作者: Shmily落墨 | 来源:发表于2017-05-02 15:43 被阅读201次

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

    一、概述

    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框架的应用显示。

    相关文章

      网友评论

      • zheNgHH: 准确清晰 好评++++++++++++++

      本文标题:PHAssetCollection

      本文链接:https://www.haomeiwen.com/subject/sneqtxtx.html