Удалить фотографию из библиотеки фотографий пользователя? - PullRequest
10 голосов
/ 31 января 2010

Есть ли способ удалить изображение, загруженное в мое приложение, из UIImagePickerController?

Я хочу иметь возможность удалить изображение из библиотеки фотографий пользователя, когда пользователь выполняет определеннуюaction.

Я предлагаю пользователю выбрать изображение из его библиотеки, затем оно загружается в мое приложение, после чего приложение выполняет некоторую анимацию shnazzy, а затем фактически удаляет изображение.Пожалуйста, помогите!

Ответы [ 3 ]

15 голосов
/ 31 января 2010

Apple фактически не позволяет вам удалять из библиотеки фотографий через API. Пользователь должен сам зайти в приложение «Фотографии» и вручную удалить его. Apple позволяет писать в библиотеку фотографий:

Чтобы сохранить неподвижное изображение для пользователя Альбом сохраненных фотографий, используйте UIImageWriteToSavedPhotosAlbum функция. Чтобы сохранить фильм в альбом сохраненных фотографий пользователя, используйте UISaveVideoAtPathToSavedPhotosAlbum функция.

Но для удаления, редактирования / переопределения существующей фотографии у Apple сейчас нет ничего подобного.

11 голосов
/ 23 декабря 2013

На самом деле вы можете удалить фотографии, сохраненные вашим приложением (сохраненные в библиотеку фотографий с помощью вызова 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 уже удален.

2 голосов
/ 21 ноября 2017

Да, мы можем удалить фотографию. Мы можем использовать PHAssetChangeRequest для этой операции.

от Apple:

Запрос на создание, удаление, изменение метаданных или изменение содержимого ресурса Photos для использования в блоке изменений библиотеки фотографий.

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 )
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...