FWAssetManager
@interface FWAssetManager : NSObject
构建 FWAssetManager 这个对象并提供单例的调用方式主要出于下面两点考虑:
- 保存照片/视频的方法较为复杂,为了方便封装系统接口,同时灵活地扩展功能,需要有一个独立对象去管理这些方法。
- 使用 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;