Удалить фотографию из библиотеки фотографий пользователя?
есть ли способ удалить изображение, загруженное в мое приложение из UIImagePickerController
?
Я хочу иметь возможность удалить изображение из библиотеки фотографий пользователя, когда пользователь выполняет определенное действие.
Я предлагаю пользователю выбрать изображение из своей библиотеки, затем он загружается в мое приложение, и в этот момент приложение делает некоторую анимацию shnazzy, а затем фактически удаляет изображение.
пожалуйста, помогите!
3 ответов
Apple фактически не позволяет удалять из библиотеки фотографий через API. Пользователь должен фактически перейти в приложение "Фотографии"и удалить его вручную. Apple позволяет вам писать в библиотеку фотографий:
сохранить изображение пользователя Сохраненный фотоальбом, используйте UIImageWriteToSavedPhotosAlbum функция. Чтобы сохранить фильм в альбом сохраненных фотографий пользователя, используйте UISaveVideoAtPathToSavedPhotosAlbum функция.
но для удаления и редактирования / переопределения существующей фотографии у Apple сейчас нет ничего подобного.
фактически, вы можете удалить фотографии, сохраненные вашим приложением (сохраненные в библиотеке фотографий с помощью вызова API UIIMAGEWRITETOSAVEDPHOTOSALBUM).
документированный 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 уже удален.
Да, мы можем удалить фотографию. Мы можем использовать PHAssetChangeRequest
для этой операции.
От Apple:
запрос на создание, удаление, изменение метаданных или изменение содержимого ресурса фотографий для использования в блоке изменения библиотеки фотографий.
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 )
})