Удалить фотографию из фотографической библиотеки пользователя?
-
24-09-2019 - |
Вопрос
Есть ли способ, которым я могу удалить изображение, которое загружается в мое приложение из UIImagePickerController
?
Я хочу удалить изображение из фото библиотеки пользователя, когда пользователь выполняет определенное действие.
Я предлагаю пользователю выбирать изображение из своей библиотеки, то он загружается в мое приложение, в какое приложение приложение делает некоторую шнацкую анимацию, то фактически удаляет изображение.
Пожалуйста помоги!
Решение
Да, мы можем удалить фото. Мы можем использовать PHAssetChangeRequest
Для этой операции.
От Apple:
Запрос на создание, удаление, изменение метаданных для или редактировать содержимое актива фотографий, для использования в блоке изменения библиотек Photo.
class func deleteAssets(_ assets: NSFastEnumeration)
куда ресурсы: Массив объектов Phasset для удаления.
PHAssetChangeRequest.deleteAssets([assetToDelete])
Итак, вы можете использовать вышеуказанный код для удаления активов.
ниже Swift 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 )
})
Другие советы
Apple на самом деле не позволяет удалить из фото библиотеки через API. Пользователь должен фактически перейти к приложению фотографий и удалить его вручную. Apple позволяет вам написать на фото библиотеку:
Чтобы сохранить неподвижное изображение в альбом сохраненных пользователей, используйте функцию UiimageWriteTosavedPhotosalbum. Чтобы сохранить фильм для спасенных пользователей альбома, используйте функцию UISavevideOatPathTosavedPhotosalbum.
Но для удаления и редактирования / переопределения существующей фотографии Apple сейчас не имеет ничего подобного.
На самом деле, вы можете удалить фотографии, сохраненные вашим приложением (сохранены в фотоблизитена с UiimageWriteTosavedPhotosalbum API).
Документированная API. [ALAsset setImageData:metadata:completionBlock:]
работает.
1). Добавьте изображение «Фото.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). Перейдите в галерею по умолчанию, вы найдете фото.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). Перейдите в галерею по умолчанию, вы найдете фото.jpg уже удален.