TL, DR:
Я хочу создать новый актив в библиотеке фотографий и применить к нему корректировочные данные (изменения), без запроса пользователя дважды .
Фон
Я разрабатываю расширение для редактирования фотографий для iOS и предоставляю аналогичные функции в приложении контейнера.
Для лучшего повторного использования кода и модульности я использую поток на основе PHContentEditingController
как для расширения (обязательно), так и для приложения-контейнера, объединяя все общие компоненты во встроенную среду, которая используется как приложением, так и приложением.ссылка на расширение ( в соответствии с рекомендациями Apple ).
В отличие от расширения приложения, которое «передает» изображение для редактирования приложением Photos и выполняет под его контролем,Контейнерное приложение должно запрашивать изменения в библиотеке ресурсов, каждое из которых приводит к тому, что у пользователя запрашивается авторизация.
При запуске приложение предлагает пользователю два варианта выбора изображения для редактирования:
- Открытие существующей фотографии из библиотеки или
- Создание новойфотография с использованием камеры.
(конечно, оба варианта зависят от UIImagePickerController
)
В настоящий момент изображения, считанные из библиотеки, проходят одинаковоредактирование потока, как в расширении приложения, с той лишь разницей, что мой собственный код пользовательского интерфейса вручную вызывает finishContentEditing(completionHandler:)
для (общего) объекта, который принимает протокол PHContentEditingController
, и, по завершении, вызывает далее PHAssetLibrary
метод performChanges(_:completionHandler)
(который вызывает запрос на авторизацию).
Это означает, что изменения, сделанные в приложении контейнера, могут быть отменены при повторном редактировании того же изображения с расширением в приложении Photos. (и, возможно, наоборот, как только я получу поддержку данных регулировки).
Для новых изображений, снятых камерой , однако, я берудругой подход.После применения фильтров я просто сохраняю результат в библиотеке фотографий, используя унаследованную функцию:
UIImageWriteToSavedPhotosAlbum(_:_:_:_:)
(в те времена, когда метки аргументов еще не были: -)
Проблема
Проблема с этим подходом заключается в том, что изменения всегда «запекаются» для изображений, снятых камерой и редактируемых в приложении (их нельзя отменить).Это кажется произвольным и, возможно, даже вводящим пользователя в заблуждение, поэтому я ищу более унифицированный подход.
Я мог бы сохранить фотографию в библиотеке сразу после того, как пользователь ее взял, иоттуда используйте тот же поток, что и с существующими активами, но это означает, что мне нужно изменить библиотеку дважды:
- Создать новый актив
- Сохранить измененияк новому активу
..., что приведет к тому, что у пользователя будет дважды запрашиваться разрешение: один раз перед редактированием изображения и еще раз при фиксации изменений.
Итак,у меня такой вопрос:
Есть ли способ создать библиотечный актив "за один раз", исходное изображение и данные корректировки?