该SDK设计参考微信选择,支持预览(支持网络图预览及删除)、多选、单张裁剪(一般头像上传用)。基本相关主要页面有相册选择列表、图片选择列表以及预览。仅支持iOS8以上系统。
GitHub源码
一、系统资源的获取
通过Photos.framework库获取系统相册,创建一个管理类集成PHCachingImageManager进行对图片各种处理,主要通过系统API请求图片。
// 获取缩略图
public func requestThumbnailImage(for asset: PHAsset, resultHandler: @escaping (UIImage?, [AnyHashable : Any]?) -> Void) -> PHImageRequestID {
let option = PHImageRequestOptions()
// option.resizeMode = .fast
let targetSize = self.getThumbnailSize(originSize: CGSize(width: asset.pixelWidth, height: asset.pixelHeight))
return self.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: option) { (image: UIImage?, dictionry: Dictionary?) in
resultHandler(image, dictionry)
}
}
// 获取预览图
public func requestPreviewImage(for asset: PHAsset, progressHandler: Photos.PHAssetImageProgressHandler?, resultHandler: @escaping (UIImage?, [AnyHashable : Any]?) -> Void) -> PHImageRequestID {
let option = PHImageRequestOptions()
// option.version = .current
option.resizeMode = .exact
// option.deliveryMode = .fastFormat
option.isNetworkAccessAllowed = true
option.progressHandler = progressHandler
let targetSize = self.getPriviewSize(originSize: CGSize(width: asset.pixelWidth, height: asset.pixelHeight))
return self.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: option) { (image: UIImage?, dictionry: Dictionary?) in
resultHandler(image, dictionry)
}
}
private func getPriviewSize(originSize: CGSize) -> CGSize {
let width = originSize.width
let height = originSize.height
let pixelScale = CGFloat(width)/CGFloat(height)
var targetSize = CGSize()
if width <= 1280 && height <= 1280 {
//aÿ