2010-01-31 13 views
10

¿Hay alguna manera de eliminar una imagen cargada en mi aplicación desde UIImagePickerController?¿Eliminar una foto de la biblioteca de fotos del usuario?

Quiero ser capaz de eliminar la imagen de la biblioteca de fotos del usuario cuando el usuario realiza una acción específica.

Estoy pidiendo al usuario que elija una imagen de su biblioteca, luego se carga en mi aplicación y en ese momento la aplicación hace una animación brillante, y luego elimina la imagen.

Por favor ayuda!

Respuesta

15

de Apple en realidad no le permite eliminar de la biblioteca de fotos a través de una API. El usuario tiene que ir a la aplicación Fotos y eliminarla manualmente. Apple no permite que se escribe en la biblioteca de fotos:

Para guardar una imagen fija para Fotos guardadas álbum del usuario, utilice la función UIImageWriteToSavedPhotosAlbum . Para guardar una película en Fotos guardadas álbum del usuario , utilice la función UISaveVideoAtPathToSavedPhotosAlbum .

Pero para eliminar y editar/anular una foto existente, Apple no tiene nada de eso ahora.

+0

¿No podemos pedir una deleción utilizando Fotos Marco? Creo que sí, podemos –

+0

PHAssetChangeRequest.deleteAssets ([assetToDelete]) –

+0

https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets –

10

En realidad, puede eliminar las fotos que guardan su aplicación (se guardan en la biblioteca de fotos con UIImageWriteToSavedPhotosAlbum llamada a la API).

La API documentado [ALAsset setImageData:metadata:completionBlock:] obras.

1). Añadir una imagen "foto.jpg" a su proyecto

2). Guarde una imagen en la biblioteca de activos:

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). Vaya a la galería predeterminada, encontrará photo.jpg en su álbum "Saved Photos".

4). Elimine esta imagen de la biblioteca de activos:

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). Ir a la galería predeterminada, verá que photo.jpg ya se ha eliminado.

+0

Funciona :). Pero, setImageData: metaData: la función completionBlock se usa para reemplazar una imagen, no para eliminarla de acuerdo con los documentos de Apple. ¿Estás seguro de que no habrá problemas con la AppStore? – Sukhrob

+1

Ya tengo una aplicación en Apple store, esta es una API pública, no hay problema en el proceso de revisión de la aplicación. – evanchin

+0

Esto funcionó para mí también. ¡Gracias! –

0

Sí, podemos eliminar una foto. Podemos usar PHAssetChangeRequest para esta operación.

de Apple:

una solicitud para crear, borrar, cambiar los metadatos o editar el contenido de un activo fotos, para su uso en un bloque de cambio de la biblioteca de fotos.

class func deleteAssets(_ assets: NSFastEnumeration) 

donde activos: Un conjunto de objetos PHAsset a ser borrados.

PHAssetChangeRequest.deleteAssets([assetToDelete]) 

Por lo tanto, puede usar el código anterior para eliminar activos.

a continuación es rápido código 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) 
     }) 
Cuestiones relacionadas