ZLPhotoBrowser 介绍
方便易用的相册多选框架,支持预览/相册内拍照及录视频、拖拽/滑动选择,3DTouch预览,编辑裁剪图片/视频,导出视频(可添加水印,粒子特效,视频转码);支持多语言国际化(中文简/繁,英语,日语,可手动切换);在线下载iCloud端图片;支持预览网络及本地图片/视频。

遇到的问题
在使用 ZLPhotoBrowser
的相机功能时,发现拍照完成后,并没有编辑功能,只能采取婉转的方式去实现这样的一个功能。
思路
- 拍照完成后,利用
Photos
框架进行照片保存 - 根据保存后的
localIdentifier
获取到相册这张图片的PHAsset
对象 - 调用
ZLPhotoActionSheet
的previewPhotos:index:hideToolBar:complete:
方法
ZLPhotoActionSheet
有一个这样的方法进行图片展示
/**
提供 混合预览照片及视频的方法, 相册PHAsset / 网络、本地图片 / 网络、本地视频,(需先设置 sender 参数)
@warning photos 内对象请调用 ZLDefine 中 GetDictForPreviewPhoto 方法,e.g.: GetDictForPreviewPhoto(image, ZLPreviewPhotoTypeUIImage)
@param photos 接收对象 ZLDefine 中 GetDictForPreviewPhoto 生成的字典
@param index 点击的照片/视频索引
@param hideToolBar 是否隐藏底部工具栏和导航右上角选择按钮
@param complete 回调 (数组内为接收的 PHAsset / UIImage / NSURL 对象)
*/
- (void)previewPhotos:(NSArray<NSDictionary *> *)photos index:(NSInteger)index hideToolBar:(BOOL)hideToolBar complete:(void (^)(NSArray *photos))complete;
实现
- 调用
ZLPhotoBrowser
相机功能
ZLCustomCamera *camera = [ZLCustomCamera new];
camera.allowRecordVideo = NO; // 这里不需要视频功能,所以禁止掉了
camera.doneBlock = ^(UIImage *image, NSURL *videoUrl) {
[self saveImage:image]; // 保存照片
};
[self.owner showDetailViewController:camera sender:self.owner];
self.owner
是一个UIViewController
,在这里替换成你自己的控制器即可。
- 保存照片到相册
NSError *error = nil;
// 保存图片到相册
__block PHObjectPlaceholder *createAsset = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
createAsset = [PHAssetChangeRequest creationRequestForAssetFromImage:image].placeholderForCreatedAsset; // PHAssetCreationRequest 是iOS9 之后才有的
} error:&error];
苹果对 PHObjectPlaceholder
的介绍


PHObjectPlaceholder
这个对象,继承于PHObject
,有一个 localIdentifier
属性,我们可以通过这个属性获取到相册这张照片的 PHAsset
类型对象。(网上查了资料,发现很多方式都是通过遍历相册,然后取出最后一张照片)
- 获取图片的
PHAsset
对象
PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[createAsset.localIdentifier] options:nil].lastObject;
- 调用
previewPhotos:index:hideToolBar:complete:
方法
NSArray *array = @[GetDictForPreviewPhoto(asset, ZLPreviewPhotoTypePHAsset)];
[self.actionSheet previewPhotos:array index:0 hideToolBar:NO complete:^(NSArray * _Nonnull photos) {}];

最后委婉的实现了编辑操作。
/**
* 保存图片,并且跳转编辑
*/
- (void)saveImage:(UIImage *)image {
NSError *error = nil;
// 保存图片到相册
__block PHObjectPlaceholder *createAsset = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
createAsset = [PHAssetChangeRequest creationRequestForAssetFromImage:image].placeholderForCreatedAsset; // PHAssetCreationRequest 是iOS9 之后才有的
} error:&error];
// 保存图片失败
if (error || createAsset == nil || !createAsset.localIdentifier.length) return;
// 根据 localIdentifier 获取到图片
PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[createAsset.localIdentifier] options:nil].lastObject;
NSArray *array = @[GetDictForPreviewPhoto(asset, ZLPreviewPhotoTypePHAsset)];
[self.actionSheet previewPhotos:array index:0 hideToolBar:NO complete:^(NSArray * _Nonnull photos) {}];
}
网友评论