Удалить фотографию из фотографической библиотеки пользователя?

StackOverflow https://stackoverflow.com/questions/2172978

Вопрос

Есть ли способ, которым я могу удалить изображение, которое загружается в мое приложение из 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 уже удален.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top