如何从JFImagePickerController获取选中的照片?ALAsset与UIImage接口完全参考
【免费下载链接】JFImagePickerController高性能多选图片库项目地址: https://gitcode.com/gh_mirrors/jf/JFImagePickerController
JFImagePickerController(CocoaPods 包名 JFImagePicker)是一款面向 iOS 的高性能多选图片选择库,核心功能包括多选照片、预览已选照片、针对超大图片的加载优化。本文以“如何获取选中的照片”为主线,完整梳理 ALAsset 与 UIImage 相关的接口用法,帮助新手快速上手,避免常见的内存陷阱。
一、获取选中的照片:assets 属性完全参考
用户点击“完成”后,delegate 会回调imagePickerDidFinished:,此时通过picker.assets即可拿到全部选中的ALAsset数组:
- (void)imagePickerDidFinished:(JFImagePickerController *)picker{ NSArray *selectedAssets = picker.assets; // 用户选中的照片(ALAsset 数组) [picker dismissViewControllerAnimated:YES completion:nil]; } - (void)imagePickerDidCancel:(JFImagePickerController *)picker{ [picker dismissViewControllerAnimated:YES completion:nil]; }完整示例可参考 ViewController.m。官方文档中也给出了同样的接入方式,见 README.md。
💡 选中的
ALAsset只是“照片引用”,并不是图片数据本身。真正取出图片需要下面介绍的接口。
二、ALAsset 转 UIImage 的三种方法
核心接口集中在 JFImageManager.h:
| 场景 | 接口 | 说明 |
|---|---|---|
| 加载缩略图 | thumbWithAsset:resultHandler: | 异步返回 UIImage,先给小图再给大图 |
| 加载原图/超长图 | imageWithAsset:resultHandler: | 返回 CGImageRef + 是否超长图标记 |
| 批量获取 | imagesWithType: | 一次拿到选中照片的 UIImage 数组 |
1. 加载缩略图(列表、九宫格场景首选)
[[JFImageManager sharedManager] thumbWithAsset:asset resultHandler:^(UIImage *result) { // result 是 UIImage,回调保证在主线程,可直接赋值给 UIImageView }];该方法的策略很友好:先立即回调系统小缩略图,后台再计算并回调更高质量的图,列表滚动时几乎无卡顿,实现见 JFImageManager.m。
2. 加载原图(上传、编辑场景)
[[JFImageManager sharedManager] imageWithAsset:asset resultHandler:^(CGImageRef imageRef, BOOL longImage) { UIImage *image = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); // longImage 为 YES 表示这是一张超长图,已自动压缩到屏幕宽度,不会撑爆内存 }];这是该库的亮点:对超长图(宽高比超过 2 倍且超出屏幕)会智能压缩到屏幕宽度返回,规避CGImage解码超大图导致的崩溃,实现见 JFImageManager.m。
3. 批量获取不同尺寸的 UIImage 数组
JFImagePickerController还封装了一个便捷方法 imagesWithType:,一次取出全部选中照片对应尺寸的 UIImage 数组。type 取值定义在 JFAssetHelper.h:
0小缩略图(约 120pt)1宽高比缩略图(约 320pt)2屏幕尺寸3全分辨率原图
NSArray *thumbs = [picker imagesWithType:0]; // 批量拿缩略图⚠️ 批量取
type:3原图只建议一次处理一张,避免多张原图同时驻留内存。
三、清理缓存:不要遗漏的 clear
退出编辑模式时必须调用类方法 clear,用来清理已选照片的缓存与内存:
[JFImagePickerController clear];它内部会同时清理JFAssetHelper的选中数据与JFImageManager的NSCache图片缓存,是防止内存持续增长的关键一步。
四、接入步骤速查
- 在 Podfile 中加入
pod 'JFImagePicker'(最低支持 iOS 7.0) - 创建 picker 并设置 delegate:
[[JFImagePickerController alloc] initWithRootViewController:nil] - 在
imagePickerDidFinished:中通过picker.assets获取选中的照片 - 用
JFImageManager按需把ALAsset转成 UIImage - 离开页面时调用
[JFImagePickerController clear]释放缓存
按以上步骤,你就可以完整、安全地从 JFImagePickerController 中拿到选中的照片了。更多功能细节可查阅项目源码中的 JFAssetHelper.h 与 JFImagePickerController.h。
【免费下载链接】JFImagePickerController高性能多选图片库项目地址: https://gitcode.com/gh_mirrors/jf/JFImagePickerController
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考