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