2010-01-31 14 views
10

Esiste un modo per eliminare un'immagine caricata nella mia app da UIImagePickerController?Eliminare una foto dalla libreria di foto dell'utente?

Desidero poter eliminare l'immagine dalla libreria di foto dell'utente quando l'utente esegue un'azione specifica.

Chiedo all'utente di scegliere un'immagine dalla propria libreria, quindi viene caricata nella mia app, a quel punto l'app esegue un'animazione shnazzy, quindi elimina effettivamente l'immagine.

Si prega di aiuto!

risposta

15

Apple non consente effettivamente di eliminare dalla libreria di foto tramite un'API. L'utente deve effettivamente accedere all'app Foto ed eliminarlo manualmente. Apple non permette che si scrive alla libreria foto:

Per salvare un fermo immagine Salvato Foto album dell'utente, utilizzare la funzione UIImageWriteToSavedPhotosAlbum . Per salvare un film sull'album Foto salvate dell'utente , utilizzare la funzione UISaveVideoAtPathToSavedPhotosAlbum .

Ma per l'eliminazione e la modifica/sovrascrittura di una foto esistente, Apple non ha nulla di simile in questo momento.

+0

non possiamo richiedere un cancellazione usando Foto quadro? Penso, sì, possiamo. –

+0

PHAssetChangeRequest.deleteAssets ([assetToDelete]) –

+0

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

10

In realtà, è possibile eliminare le foto salvate dalla propria app (salvate nella libreria fotografica con UIImageWriteToSavedPhotosAlbum API call).

L'API documentata [ALAsset setImageData:metadata:completionBlock:] funziona.

1). Aggiungi un'immagine "photo.jpg" al tuo progetto

2). Salvare un'immagine nella libreria delle risorse:

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). Vai alla galleria di default, troverai foto.jpg nel tuo album "Foto salvate".

4). Eliminare questa immagine dalla libreria delle risorse:

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). Vai alla galleria di default, troverai foto.jpg è già stato eliminato.

+0

Funziona :). Ma, setImageData: metaData: la funzione completionBlock viene utilizzata per sostituire un'immagine, non per eliminarla in base ai documenti Apple. Sei sicuro che non ci saranno problemi con l'AppStore? – Sukhrob

+1

Ho già un'app in Apple Store, questa è un'API pubblica, nessun problema nel processo di revisione app. – evanchin

+0

Questo ha funzionato anche per me. Grazie! –

0

Sì, è possibile eliminare una foto. Possiamo usare PHAssetChangeRequest per questa operazione.

da Apple:

Una richiesta per creare, eliminare, modificare i metadati, o modificare il contenuto di una foto di asset, per l'uso in un blocco di cambiamento libreria di foto.

class func deleteAssets(_ assets: NSFastEnumeration) 

dove beni: Un array di oggetti PHAsset da eliminare.

PHAssetChangeRequest.deleteAssets([assetToDelete]) 

Quindi, è possibile utilizzare il codice precedente per eliminare le risorse.

di seguito è il codice 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) 
     }) 
Problemi correlati