iOS. Приемы программирования
Шрифт:
Если вы попытаетесь воспользоваться процедурой UIImageWriteToSavedPhotosAlbum для сохранения фотоснимка в пользовательской библиотеке фотографий и приложение впервые выполняет эту операцию на данном устройстве, то iOS запросит у пользователя разрешение на такую операцию (рис. 13.1). Таким образом, пользователь может позволить или не позволить приложению сохранять фотографии на устройстве. В конце концов, это пользовательское устройство и мы не можем делать на этом устройстве ничего такого, чего нам не разрешил пользователь. Если пользователь дает разрешение, то процедура UIImageWriteToSavedPhotosAlbum продолжит сохранение изображения. Если разрешение не получено, то селектор обработчика завершения по-прежнему будет вызываться, но параметр didFinishSavingWithError этого селектора будет устанавливаться в валидный экземпляр ошибки.
Рис. 13.1. iOS запрашивает у пользователя права доступа, прежде чем программа сможет сохранить снимок в библиотеке фотографий
Теперь, если пользователь отказывает приложению в праве доступа, все последующие вызовы процедуры UIImageWriteToSavedPhotosAlbum будут неуспешными, пока пользователь вручную не изменит настройки своего устройства (рис. 13.2).
Рис. 13.2. Приложению не разрешен доступ к пользовательской библиотеке фотографий
Если в данном селекторе вы получаете параметр error, значение которого равно nil, это означает, что изображение было успешно сохранено в пользовательской библиотеке фотографий. В противном случае можно получить значение данного параметра, чтобы выяснить, в чем заключается ошибка.
13.5. Сохранение видео в библиотеке фотографий
Постановка задачи
Требуется сохранить в библиотеке фотографий видеоролик, доступный по URL, например ролик из пакета вашего приложения.
Решение
Воспользуйтесь методом экземпляра writeVideoAtPathToSavedPhotosAlbum: completionBlock:, относящимся к классу ALAssetsLibrary:
Обсуждение
Фреймворк Assets Library — удобный посредник между разработчиком и библиотекой фотографий. Как будет указано в разделе 13.6, в iOS SDK вам предоставляются встроенные компоненты графического пользовательского интерфейса, которыми можно пользоваться для доступа к содержимому библиотеки фотографий. Тем не менее иногда может потребоваться и непосредственный доступ к этому содержимому. В таких случаях следует пользоваться фреймворком библиотеки ресурсов (Assets Library).
Выделив и инициализировав объект Assets Library типа ALAssetsLibrary, можно пользоваться методом экземпляра writeVideoAtPathToSavedPhotosAlbum: completionBlock:, относящимся к данному объекту, для записи видео с URL в библиотеку фотографий. Все, что от вас требуется, — предоставить URL видеоролика в форме NSURL, а также блоковый объект, чей код будет вызываться после сохранения видео. Этот блоковый объект должен принимать два параметра типов NSURL и NSError.
Если параметр error имеет значение nil, процесс сохранения прошел нормально и поводов для беспокойства нет. Одна из типичных ошибок, которую iOS может вам вернуть в такой ситуации, примерно такова:
Такое сообщение об ошибке вы можете получить и в случае, если попытаетесь передать URL (уникальный идентификатор ресурса), не относящийся к пакету вашего приложения.
Первый параметр, передаваемый блоковому объекту, который, в свою очередь, предоставляется методу writeVideoAtPathToSavedPhotosAlbum: completionBlock:, будет указывать URL видео, сохраненного в библиотеке ресурсов. URL такого рода может иметь следующий вид:
Если ваша программа впервые пытается обратиться к библиотеке фотографий на пользовательском устройстве, то iOS спросит у пользователя, разрешена такая операция или нет. Если пользователь даст разрешение, то вызов метода writeVideoAtPathToSavedPhotosAlbum: completionBlock: будет успешным. Если же разрешение получено не будет, то объект ошибки внутри блока завершения будет валидным объектом ошибки, который вы можете проверить и над которым можете выполнять действия. Если ранее пользователь не разрешил вашему приложению доступ к библиотеке фотографий, то вы не сможете изменить это решение программно. Лишь когда сам пользователь решит предоставить вам доступ к библиотеке фотографий, он изменит соответствующие настройки в разделах Settings (Настройки) и Privacy (Конфиденциальность).