【发布时间】:2018-10-04 07:03:36
【问题描述】:
TL、DR:
我想在照片库中创建一个新资产并对其应用调整数据(编辑),而不提示用户两次。
背景
我正在开发一个 iOS 照片编辑扩展程序,并在容器应用程序中提供类似的功能。
为了更好的代码重用和模块化,我在扩展(必需)和容器应用程序上都采用了基于 PHContentEditingController 的流程,将所有共享组件捆绑在应用程序和扩展程序链接的嵌入式框架中(as recommended by Apple)。
与应用程序扩展程序不同,后者是“传递”图像以由照片应用程序编辑并在其监督下执行,容器应用程序需要请求对资产库进行更改,每次都会提示用户进行授权。
在启动时,该应用为用户提供了两个用于获取要编辑的图像的选项:
- 从库中打开现有照片,或
- 使用相机拍摄新照片。
(当然,这两个选项都依赖于UIImagePickerController)
现在,从库中读取的图像与在应用程序扩展中的编辑流程相同,唯一的区别是我自己的 UI 代码在采用 @987654325 的(共享)对象上手动调用 finishContentEditing(completionHandler:) @protocol,完成后进一步调用PHAssetLibrary方法performChanges(_:completionHandler)(触发授权提示)。
这意味着在照片应用中使用扩展程序重新编辑同一图像时,可以还原在容器应用中进行的编辑(反之亦然,一旦我绕过支持调整数据)。
但是,对于用相机拍摄的新图像,我采取了不同的方法。应用过滤器后,我只是使用旧功能将结果保存到照片库:
UIImageWriteToSavedPhotosAlbum(_:_:_:_:)
(从参数标签还没有出现的时候开始 :-)
问题
这种方法的问题在于,对于使用相机拍摄并在应用程序中进行编辑的图像,编辑总是被“烘焙”(无法恢复)。这让用户感觉很随意,甚至可能让用户感到困惑,因此我正在寻找更统一的方法。
我可以在用户拍摄照片后立即将照片保存到库中,然后使用与现有资产相同的流程,但这意味着我需要修改库两次:
- 创建新资产
- 保存对新资产的编辑
...这将导致用户被要求两次许可:一次是在编辑图像之前,一次是在提交编辑时。
所以,我的问题是:
有没有办法“一次性”创建库资产、原始图像和调整数据?
【问题讨论】:
标签: ios phasset phphotolibrary