AssetManager

public class AssetManager : @unchecked Sendable

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

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

QMUI_iOS

Static

  • 获取 AssetManager 的单例

    Declaration

    Swift

    public static let shared: AssetManager
  • 资源管理器临时文件存放目录,使用完成后需自行删除

    Declaration

    Swift

    public static var cachePath: String { get }
  • LivePhoto导出文件存放路径,使用完成后需自行删除

    Declaration

    Swift

    public static var livePhotoPath: String { get }
  • 视频导出文件建议存放路径,使用完成后需自行删除

    Declaration

    Swift

    public static var videoExportPath: String { get }
  • 图片选择器缓存文件存放目录,使用完成后需自行删除

    Declaration

    Swift

    public static var imagePickerPath: String { get }
  • 获取当前应用的“照片”访问授权状态

    Declaration

    Swift

    public static var authorizationStatus: AssetAuthorizationStatus { get }
  • 调起系统询问是否授权访问“照片”的 界面

    Declaration

    Swift

    public static func requestAuthorization(completion: (@MainActor @Sendable (AssetAuthorizationStatus) -> Void)? = nil)

    Parameters

    completion

    授权结束后调用的 block,主线程回调

  • 获取所有相册

    @param albumContentType 相册的内容类型,设定了内容类型后,所获取的相册中只包含对应类型的资源 @param showEmptyAlbum 是否显示空相册(经过 contentType 过滤后仍为空的相册) @param showSmartAlbum 是否显示“智能相册”

    @return 返回包含所有合适相册的数组

    Declaration

    Swift

    public static func fetchAllAlbums(albumContentType: AlbumContentType, showEmptyAlbum: Bool, showSmartAlbum: Bool) -> [PHAssetCollection]
  • 获取一个 PHAssetCollection 中创建日期最新的资源,可指定创建日期

    Declaration

    Swift

    public static func fetchLatestAsset(assetCollection: PHAssetCollection, creationDate: Date? = nil) -> PHAsset?
  • 根据 contentType 的值产生一个合适的 PHFetchOptions,并把内容以资源创建日期排序,创建日期较新的资源排在前面

    @param albumContentType 相册的内容类型

    @return 返回一个合适的 PHFetchOptions

    Declaration

    Swift

    public static func createFetchOptions(albumContentType: AlbumContentType) -> PHFetchOptions
  • 保存图片到指定相册(传入 UIImage)

    Declaration

    Swift

    public static func saveImage(image: UIImage?, albumAssetsGroup: AssetGroup, completion: @escaping @MainActor @Sendable (Asset?, Error?) -> Void)
  • 保存图片到指定相册(传入 图片路径)

    Declaration

    Swift

    public static func saveImage(imagePath: String, albumAssetsGroup: AssetGroup, completion: @escaping @MainActor @Sendable (Asset?, Error?) -> Void)
  • 保存视频到指定相册(传入 视频路径)

    Declaration

    Swift

    public static func saveVideo(videoPath: String, albumAssetsGroup: AssetGroup, completion: @escaping @MainActor @Sendable (Asset?, Error?) -> Void)

Public

  • 获取一个 PHCachingImageManager 的实例

    Declaration

    Swift

    public lazy var phCachingImageManager: PHCachingImageManager { get set }
  • 初始化方法

    Declaration

    Swift

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

    Declaration

    Swift

    public func enumerateAllAlbums(albumContentType: AlbumContentType, showEmptyAlbum: Bool = false, showSmartAlbum: Bool = true, using block: (AssetGroup?) -> Void)

    Parameters

    albumContentType

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

    showEmptyAlbum

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

    showSmartAlbum

    是否显示"智能相册",默认true

    block

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

  • 保存图片到指定相册(传入 CGImage)

    无论用户保存到哪个自行创建的相册,系统都会在“相机胶卷”相册中同时保存这个图片。

    • 原因请参考 AssetManager 对象的保存图片和视频方法的注释。 无法通过该方法把图片保存到“智能相册”,“智能相册”只能由系统控制资源的增删。

    Declaration

    Swift

    public func saveImage(imageRef: CGImage, orientation: UIImage.Orientation, photoLibrary: PHPhotoLibrary? = nil, albumAssetsGroup: AssetGroup, completion: @escaping @MainActor @Sendable (Asset?, Error?) -> Void)
  • 保存图片到指定相册(传入 图片路径URL)

    无论用户保存到哪个自行创建的相册,系统都会在“相机胶卷”相册中同时保存这个图片。

    • 原因请参考 AssetManager 对象的保存图片和视频方法的注释。 无法通过该方法把图片保存到“智能相册”,“智能相册”只能由系统控制资源的增删。

    Declaration

    Swift

    public func saveImage(imagePathURL: URL, photoLibrary: PHPhotoLibrary? = nil, albumAssetsGroup: AssetGroup, completion: @escaping @MainActor @Sendable (Asset?, Error?) -> Void)
  • 保存视频到指定相册(传入 视频路径URL)

    无论用户保存到哪个自行创建的相册,系统都会在“相机胶卷”相册中同时保存这个图片。

    • 原因请参考 AssetManager 对象的保存图片和视频方法的注释。 无法通过该方法把图片保存到“智能相册”,“智能相册”只能由系统控制资源的增删。

    Declaration

    Swift

    public func saveVideo(videoPathURL: URL, photoLibrary: PHPhotoLibrary? = nil, albumAssetsGroup: AssetGroup, completion: @escaping @MainActor @Sendable (Asset?, Error?) -> Void)