Asset

@objc(ObjCAsset)
public class Asset : NSObject, @unchecked Sendable

相册里某一个资源的包装对象,该资源可能是图片、视频等

Asset 重写了 isEqual: 方法,只要两个 Asset 的 identifier 相同,则认为是同一个对象,以方便在数组、字典等容器中对大量 Asset 进行遍历查找等操作

  • 只读PHAsset对象

    Declaration

    Swift

    public let phAsset: PHAsset
  • 只读资源类型

    Declaration

    Swift

    public private(set) var assetType: AssetType { get }
  • 只读资源子类型

    Declaration

    Swift

    public private(set) var assetSubType: AssetSubType { get }
  • 从 iCloud 下载资源大图的状态

    Declaration

    Swift

    public private(set) var downloadStatus: AssetDownloadStatus { get }
  • 从 iCloud 下载资源大图的进度

    Declaration

    Swift

    public var downloadProgress: Double { get set }
  • 从 iCloud 请求获得资源的大图的请求 ID

    Declaration

    Swift

    public var requestID: Int
  • 自定义编辑后的图片,用于实现图片裁剪等功能,默认nil

    Declaration

    Swift

    public var editedImage: UIImage?
  • 自定义请求结果对象,用于保存请求结果场景,默认nil

    Declaration

    Swift

    public var requestObject: Any?
  • 自定义请求结果信息,用于保存请求结果场景,默认nil

    Declaration

    Swift

    public var requestInfo: [AnyHashable : Any]?
  • Asset 的标识,每个 Asset 的 identifier 都不同。只要两个 Asset 的 identifier 相同则认为它们是同一个 asset

    Declaration

    Swift

    public var identifier: String { get }
  • 根据唯一标志初始化

    Declaration

    Swift

    public static func asset(identifier: String) -> Asset?
  • 初始化方法

    Declaration

    Swift

    public init(phAsset: PHAsset)
  • Asset 的原图(包含系统相册“编辑”功能处理后的效果)

    Declaration

    Swift

    public var originImage: UIImage? { get }
  • Asset 的缩略图,size 指定返回的缩略图的大小,pt 为单位

    Declaration

    Swift

    public func thumbnailImage(size: CGSize) -> UIImage?
  • Asset 的预览图,输出与当前设备屏幕大小相同尺寸的图片,如果图片原图小于当前设备屏幕的尺寸,则只输出原图大小的图片

    Declaration

    Swift

    public func previewImage(size: CGSize? = nil) -> UIImage?

    Parameters

    size

    图片尺寸,默认屏幕大小

    Return Value

    预览图

  • 默认异步请求 Asset 的原图,包含了系统照片“编辑”功能处理后的效果(剪裁,旋转和滤镜等),可能会有网络请求

    Declaration

    Swift

    @discardableResult
    public func requestOriginImage(
        synchronous: Bool = false,
        completion: (@Sendable (_ result: UIImage?, _ info: [AnyHashable: Any]?, _ finished: Bool) -> Void)?,
        progressHandler: (@Sendable (Double, (any Error)?, UnsafeMutablePointer<ObjCBool>, [AnyHashable: Any]?) -> Void)? = nil
    ) -> Int

    Parameters

    synchronous

    是否同步,默认false

    completion

    请求完成后调用的闭包,包含请求的原图和图片信息。该闭包会被多次调用,第一次调用获取到的是低清图,然后不断调用直到获取到高清图。

    progressHandler

    处理请求进度的处理程序,在闭包中修改 UI 时需要手动放到主线程处理。

    Return Value

    返回请求图片的请求 id

  • 默认异步请求 Asset 的缩略图,不会产生网络请求

    Declaration

    Swift

    @discardableResult
    public func requestThumbnailImage(
        size: CGSize,
        synchronous: Bool = false,
        completion: (@Sendable (_ result: UIImage?, _ info: [AnyHashable: Any]?, _ finished: Bool) -> Void)?
    ) -> Int

    Parameters

    size

    指定返回的缩略图的大小

    synchronous

    是否同步,默认false

    completion

    请求完成后调用的闭包,包含请求的缩略图和图片信息。该闭包会被多次调用,第一次调用获取到的是低清图,然后不断调用直到获取到高清图,此时闭包中的第二个参数(图片信息)为 nil。

    Return Value

    返回请求图片的请求 id

  • 默认异步请求 Asset 的预览图,可能会有网络请求

    Declaration

    Swift

    @discardableResult
    public func requestPreviewImage(
        size: CGSize? = nil,
        synchronous: Bool = false,
        completion: (@Sendable (_ result: UIImage?, _ info: [AnyHashable: Any]?, _ finished: Bool) -> Void)?,
        progressHandler: (@Sendable (Double, (any Error)?, UnsafeMutablePointer<ObjCBool>, [AnyHashable: Any]?) -> Void)? = nil
    ) -> Int

    Parameters

    size

    尺寸,默认屏幕大小

    synchronous

    是否同步,默认false

    completion

    请求完成后调用的闭包,包含请求的预览图和图片信息。该闭包会被多次调用,第一次调用获取到的是低清图,然后不断调用直到获取到高清图。

    progressHandler

    处理请求进度的处理程序,在闭包中修改 UI 时需要手动放到主线程处理。

    Return Value

    返回请求图片的请求 id

  • 异步请求 Live Photo,可能会有网络请求

    Declaration

    Swift

    @discardableResult
    public func requestLivePhoto(
        size: CGSize? = nil,
        completion: (@Sendable (_ livePhoto: PHLivePhoto?, _ info: [AnyHashable: Any]?, _ finished: Bool) -> Void)?,
        progressHandler: (@Sendable (Double, (any Error)?, UnsafeMutablePointer<ObjCBool>, [AnyHashable: Any]?) -> Void)? = nil
    ) -> Int

    Parameters

    size

    尺寸,默认屏幕大小

    completion

    请求完成后调用的闭包,包含请求的 Live Photo 和相关信息。如果 assetType 不是 AssetTypeLivePhoto,则为 nil。

    progressHandler

    处理请求进度的处理程序,在闭包中修改 UI 时需要手动放到主线程处理。

    Return Value

    返回请求 Live Photo 的请求 id

  • 异步请求 AVPlayerItem,可能会有网络请求

    Declaration

    Swift

    @discardableResult
    public func requestPlayerItem(
        completion: (@Sendable (_ playerItem: AVPlayerItem?, _ info: [AnyHashable: Any]?) -> Void)?,
        progressHandler: (@Sendable (Double, (any Error)?, UnsafeMutablePointer<ObjCBool>, [AnyHashable: Any]?) -> Void)? = nil
    ) -> Int

    Parameters

    completion

    完成请求后调用的 block,参数中包含了请求的 AVPlayerItem 以及相关信息,若 assetType 不是 AssetTypeVideo 则为 nil

    progressHandler

    处理请求进度的 handler,不在主线程上执行,在 block 中修改 UI 时注意需要手工放到主线程处理。

    Return Value

    返回请求 AVPlayerItem 的请求 id

  • 异步请求 视频文件URL,可能会有网络请求

    Declaration

    Swift

    @discardableResult
    public func requestVideoURL(
        outputURL: URL,
        exportPreset: String,
        completion: (@Sendable (_ videoURL: URL?, _ info: [AnyHashable: Any]?) -> Void)?,
        progressHandler: (@Sendable (Double, (any Error)?, UnsafeMutablePointer<ObjCBool>, [AnyHashable: Any]?) -> Void)? = nil
    ) -> Int

    Parameters

    outputURL

    视频输出文件URL路径,如果路径已存在会导出失败

    exportPreset

    导出视频选项配置

    completion

    完成请求后调用的 block,参数中包含了请求的 文件URL 以及相关信息,若 assetType 不是 AssetTypeVideo 则为 nil

    progressHandler

    处理请求进度的 handler,不在主线程上执行,在 block 中修改 UI 时注意需要手工放到主线程处理。

    Return Value

    返回请求 视频文件URL 的请求 id

  • 异步请求 视频AVAsset,可能会有网络请求

    Declaration

    Swift

    @discardableResult
    public func requestAVAsset(
        completion: (@Sendable (_ asset: AVAsset?, _ audioMix: AVAudioMix?, _ info: [AnyHashable: Any]?) -> Void)?,
        progressHandler: (@Sendable (Double, (any Error)?, UnsafeMutablePointer<ObjCBool>, [AnyHashable: Any]?) -> Void)? = nil
    ) -> Int

    Parameters

    completion

    完成请求后调用的 block,参数中包含了请求的 AVAsset 以及相关信息

    progressHandler

    处理请求进度的 handler,不在主线程上执行,在 block 中修改 UI 时注意需要手工放到主线程处理。

    Return Value

    返回请求 视频AVAsset 的请求 id

  • 默认异步请求图片的 Data

    Declaration

    Swift

    public func requestImageData(
        synchronous: Bool = false,
        completion: (@Sendable (_ imageData: Data?, _ info: [AnyHashable: Any]?, _ isGIF: Bool, _ isHEIC: Bool) -> Void)?
    )

    Parameters

    synchronous

    是否同步,默认false

    completion

    完成请求后调用的 block,参数中包含了请求的图片 Data(若 assetType 不是 AssetTypeImage 或 AssetTypeLivePhoto 则为 nil),该图片是否为 GIF 的判断值,以及该图片的文件格式是否为 HEIC

  • 获取图片的 UIImageOrientation 值,仅 assetType 为 AssetTypeImage 或 AssetTypeLivePhoto 时有效

    Declaration

    Swift

    public var imageOrientation: UIImage.Orientation { get }
  • 更新下载资源的结果

    Declaration

    Swift

    public func updateDownloadStatus(downloadResult succeed: Bool)
  • 获取 Asset 的体积(数据大小),图片支持同步

    Declaration

    Swift

    public func assetSize(
        synchronous: Bool = false,
        completion: (@Sendable (Int64) -> Void)?
    )
  • 获取 Asset 的总时长(仅视频)

    Declaration

    Swift

    public var duration: TimeInterval { get }
  • 重写比较方法,只要两个 Asset 的 identifier 相同则认为它们是同一个 asset

    Declaration

    Swift

    override public func isEqual(_ object: Any?) -> Bool