代码之家  ›  专栏  ›  技术社区  ›  Nicolas Miari

用调整数据一次性创建相位集

  •  0
  • Nicolas Miari  · 技术社区  · 8 年前

    我想在照片库中创建一个新资源,并对其应用调整数据(编辑),而不提示用户 .

    我正在开发一个iOS 照片编辑扩展 ,并在容器应用程序中提供类似的功能。

    为了更好的代码重用和模块化,我采用了 PHContentEditingController as recommended by Apple ).


    与应用程序扩展不同,应用程序扩展通过照片应用程序“传递”一个要编辑的图像并在其监督下执行,容器应用程序需要请求对资产库进行更改,每次更改都会提示用户进行授权。

    启动时,该应用程序为用户提供了两个选择,以获取要编辑的图像:

    • 从库中打开现有照片,或
    • 用相机拍一张新照片。

    UIImagePickerController ,当然)

    现在,从库中读取的图像经过的编辑流程与在应用程序扩展中相同,唯一的区别是我自己的UI代码手动调用 finishContentEditing(completionHandler:) 关于采用 协议,完成后,它进一步调用 PHAssetLibrary 方法 performChanges(_:completionHandler) (触发授权提示)。

    这意味着在容器应用程序中所做的编辑可以 还原 使用照片应用程序中的扩展重新编辑同一图像时 (一旦我开始支持调整数据,也可能反过来)。

    使用相机拍摄的新图像 然而,我采取了不同的方法。应用过滤器后,我只需使用遗留函数将结果保存到照片库:

    UIImageWriteToSavedPhotosAlbum(_:_:_:_:)

    (回到参数标签还不是什么东西的时候:-)


    问题

    更统一的方法。

    我可以在用户拍照后立即将照片保存到库中,并从库中使用与现有资源相同的流,但这意味着我需要修改库 两次:

    …这将导致用户被请求两次权限:一次是在编辑图像之前,另一次是在提交编辑时。

    所以,我的问题是:

    有没有办法“一次性”创建一个库资源,即原始图像 调整数据?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Nicolas Miari    8 年前

    more urgent issues 现在),我似乎已经找到了我的问题的确切答案 Apple's documentation for one of the initializers of the PHContentEditingOutput class

    init(placeholderForCreatedAsset: PHObjectPlaceholder)
    

    从文档中:

    讨论

    使用编辑的内容,而不是编辑资产的内容 添加到库之后。例如,可以使用此选项 如果你的应用程序对它用设备捕获的照片应用过滤器 camerain而不是只将过滤后的图像保存到照片中 库中,你的应用程序可以保存过滤后的图像和原始图像, 允许用户还原到原始图像或应用不同的 稍后过滤。

    注意

    库包括资产你的应用程序最近添加了照片 提示用户更改资源内容的权限。如果 相反,您的应用程序使用init(placeholderForCreatedAsset:)方法 创建一个有编辑内容的资源,照片可以识别你的应用程序 获取用户的编辑权限。


    我想我们都需要偶尔来一次健康剂量的RTFM!:-)