FWAssetManager


@interface FWAssetManager : NSObject

构建 FWAssetManager 这个对象并提供单例的调用方式主要出于下面两点考虑:

  1. 保存照片/视频的方法较为复杂,为了方便封装系统接口,同时灵活地扩展功能,需要有一个独立对象去管理这些方法。
  2. 使用 PhotoKit 获取图片,基本都需要一个 PHCachingImageManager 的实例,为了减少消耗, FWAssetManager 单例内部也构建了一个 PHCachingImageManager,并且暴露给外面,方便获取 PHCachingImageManager 的实例。
  • 获取 FWAssetManager 的单例

    Declaration

    Objective-C

    @property (class, nonatomic, readonly) FWAssetManager *_Nonnull sharedInstance;
  • 获取当前应用的“照片”访问授权状态

    Declaration

    Objective-C

    + (FWAssetAuthorizationStatus)authorizationStatus;
  • 调起系统询问是否授权访问“照片”的 UIAlertView

    Declaration

    Objective-C

    + (void)requestAuthorization:
        (nullable void (^)(FWAssetAuthorizationStatus))handler;

    Parameters

    handler

    授权结束后调用的 block,默认不在主线程上执行,如果需要在 block 中修改 UI,记得 dispatch 到 mainqueue

  • 获取所有的相册,包括个人收藏,最近添加,自拍这类“智能相册”

    Declaration

    Objective-C

    - (void)enumerateAllAlbumsWithAlbumContentType:(FWAlbumContentType)contentType
                                    showEmptyAlbum:(BOOL)showEmptyAlbum
                         showSmartAlbumIfSupported:(BOOL)showSmartAlbumIfSupported
                                        usingBlock:
                                            (nullable void (^)(
                                                FWAssetGroup *_Nullable __strong))
                                                enumerationBlock;

    Parameters

    contentType

    相册的内容类型,设定了内容类型后,所获取的相册中只包含对应类型的资源

    showEmptyAlbum

    是否显示空相册(经过 contentType 过滤后仍为空的相册)

    showSmartAlbumIfSupported

    是否显示"智能相册"

    enumerationBlock

    参数 resultAssetsGroup 表示每次枚举时对应的相册。枚举所有相册结束后,enumerationBlock 会被再调用一次, 这时 resultAssetsGroup 的值为 nil。可以以此作为判断枚举结束的标记。

  • 获取所有相册,默认显示系统的“智能相册”,不显示空相册(经过 contentType 过滤后为空的相册)

    Declaration

    Objective-C

    - (void)enumerateAllAlbumsWithAlbumContentType:(FWAlbumContentType)contentType
                                        usingBlock:
                                            (nullable void (^)(
                                                FWAssetGroup *_Nullable __strong))
                                                enumerationBlock;
  • 保存图片或视频到指定的相册

    Warning

    无论用户保存到哪个自行创建的相册,系统都会在“相机胶卷”相册中同时保存这个图片。 因为系统没有把图片和视频直接保存到指定相册的接口,都只能先保存到“相机胶卷”,从而生成了 Asset 对象, 再把 Asset 对象添加到指定相册中,从而达到保存资源到指定相册的效果。 即使调用 PhotoKit 保存图片或视频到指定相册的新接口也是如此,并且官方 PhotoKit SampleCode 中例子也是表现如此, 因此这应该是一个合符官方预期的表现。

    Warning

    无法通过该方法把图片保存到“智能相册”,“智能相册”只能由系统控制资源的增删。

    Declaration

    Objective-C

    - (void)saveImageWithImageRef:(nonnull CGImageRef)imageRef
                 albumAssetsGroup:(nonnull FWAssetGroup *)albumAssetsGroup
                      orientation:(UIImageOrientation)orientation
                  completionBlock:
                      (nonnull FWWriteAssetCompletionBlock)completionBlock;
  • Undocumented

    Declaration

    Objective-C

    - (void)saveImageWithImagePathURL:(NSURL *)imagePathURL albumAssetsGroup:(FWAssetGroup *)albumAssetsGroup completionBlock:(FWWriteAssetCompletionBlock)completionBlock;
  • Undocumented

    Declaration

    Objective-C

    - (void)saveVideoWithVideoPathURL:(NSURL *)videoPathURL albumAssetsGroup:(FWAssetGroup *)albumAssetsGroup completionBlock:(FWWriteAssetCompletionBlock)completionBlock;
  • 获取一个 PHCachingImageManager 的实例

    Declaration

    Objective-C

    - (nonnull PHCachingImageManager *)phCachingImageManager;