Удалить фотографию из библиотеки фотографий пользователя?
Есть ли способ удалить изображение, загруженное в мое приложение, с помощью UIImagePickerController
?
Я хочу, чтобы убрать изображение из библиотеки фотографий пользователя, когда пользователь выполняет определенное действие.
Я предлагаю пользователю выбрать образ из своей библиотеки, затем он загружается в мое приложение, после чего приложение выполняет некоторую shnazzy-анимацию, а затем фактически удаляет изображение.
Пожалуйста, помогите!
Ответы
Ответ 1
Apple фактически не позволяет вам удалять из библиотеки фотографий через API. Пользователь должен фактически перейти в приложение "Фото" и самостоятельно удалить его вручную. Apple позволяет вам писать в библиотеку фотографий:
Чтобы сохранить неподвижное изображение для пользователей Альбом сохраненных фотографий, используйте UIImageWriteToSavedPhotosAlbum функция. Чтобы сохранить фильм в альбомов сохраненных фотографий, используйте UISaveVideoAtPathToSavedPhotosAlbum функция.
Но для удаления и редактирования/переопределения существующей фотографии Apple сейчас не имеет ничего подобного.
Ответ 2
На самом деле вы можете удалить фотографии, сохраненные в приложении (сохраненные в библиотеке фотографий с помощью вызова API UIImageWriteToSavedPhotosAlbum).
Документированный API [ALAsset setImageData:metadata:completionBlock:]
работает.
1). Добавить изображение "photo.jpg" в свой проект
2). Сохраните изображение в библиотеке ресурсов:
ALAssetsLibrary *lib = [ALAssetsLibrary new];
UIImage *image = [UIImage imageNamed:@"photo.jpg"];
[lib writeImageToSavedPhotosAlbum:image.CGImage metadata:@{} completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"Write image %@ to asset library. (Error %@)", assetURL, error);
}];
3). Перейдите в галерею по умолчанию, вы найдете photo.jpg в своем альбоме "Сохраненные фотографии".
4). Удалить это изображение из библиотеки ресурсов:
ALAssetsLibrary *lib = [ALAssetsLibrary new];
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) {
if(asset.isEditable) {
[asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"Asset url %@ should be deleted. (Error %@)", assetURL, error);
}];
}
}];
} failureBlock:^(NSError *error) {
}];
5). Перейдите в галерею по умолчанию, вы увидите, что photo.jpg уже удален.
Ответ 3
Да, мы можем удалить фотографию. Мы можем использовать PHAssetChangeRequest
для этой операции.
От Apple:
Запрос на создание, удаление, изменение метаданных для или изменение содержимого объекта "Фотографии" для использования в блоке изменения фотокаталогов.
class func deleteAssets(_ assets: NSFastEnumeration)
где активы:
Массив объектов PHAsset для удаления.
PHAssetChangeRequest.deleteAssets([assetToDelete])
Таким образом, вы можете использовать приведенный выше код для удаления активов.
ниже - это быстрый код 3,
PHPhotoLibrary.shared().performChanges({
let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: imageUrls as! [URL], options: nil)
PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
}, completionHandler: {success, error in
print(success ? "Success" : error )
})