2012-08-26 10 views
9

Sto lavorando a un'app Iphone e posso enumerare le risorse utilizzando Assetslibrary e caricarle in una vista tabella. L'utente può eliminare una riga (un'immagine/video) nell'app ma come faccio ad AGGIORNARE l'album fotografico Iphone direttamente dalla mia app? Altrimenti all'aggiornamento, la vista tabella ricaricherà l'asset precedentemente eliminato.Eliminare una risorsa (immagine o video) dall'iPhone in IOS

risposta

0

Possibile duplicazione di https://stackoverflow.com/a/11058934/300292. Risposta semplice: non puoi. L'app Foto è l'unico posto in cui è possibile eliminare le risorse. Probabilmente è una buona cosa - non vorresti che nessuna app volente o nolente sia in grado di cancellare tutte le tue foto, vero?

+0

Volevo solo essere certi. Grazie. –

1

È tardi ma per gli altri utenti sarà d'aiuto.
Come sappiamo, solo l'app per le foto può eliminare le immagini. In tale situazione, ho recuperato tutte le immagini dalle foto via alassets, le ho viste nella galleria personalizzata, dato all'utente la possibilità di selezionare più immagini dalle risorse per salvarle nella rubrica telefonica. Successivamente sto usando la mia galleria di app invece della galleria di foto. Ho dato l'opzione nell'app per importare immagini da foto alla galleria di app (che è una cartella di cartelle di documenti di immagini) in qualsiasi momento nell'app.

15

in iOS 8 eliminazione di foto è possibile usando le foto quadro

Si prega di verificare la documentazione di foto quadro

Per l'eliminazione di attività si riferiscono alla PHAssetChangeRequest

+ (void)deleteAssets:(id<NSFastEnumeration>)assets 

dove assets è un array di PHAsset oggetti essere cancellato.

+

Per cancellare collezioni si riferiscono a PHAssetCollectionChangeRequest

+ (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections 

https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets
https://developer.apple.com/documentation/photos/phassetcollectionchangerequest/1619453-deleteassetcollections

+0

Non sono convinto che un'app sia in grado di eliminare risorse dalla libreria di foto. Mi piacerebbe vedere un esempio. – coco

+0

Cosa succede se ho solo l'identificatore locale dell'immagine e dell'immagine come "AF508E2B-6B00-4E26-8A2B-B160C74478A9/L0/001". allora come eliminare l'immagine dall'album personalizzato nella galleria? –

10

Come ha detto Ted, questo è ora possibile in iOS 8 utilizzando il servizio di foto. In realtà è abbastanza pulito. È necessario inviare una richiesta di modifica al photolibrary. Ecco un esempio.

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    [PHAssetChangeRequest deleteAssets:arrayOfPHAssets]; 
} completionHandler:^(BOOL success, NSError *error) { 
    NSLog(@"Finished deleting asset. %@", (success ? @"Success." : error)); 
}]; 

Assicurati di aver importato le foto e ottenuto l'autorizzazione da parte dell'utente. (Che probabilmente avete fatto per mostrare l'immagine già)

PHAssetchangeRequest - deleteAssets https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets PHPhotoLibrary Classe - authorizationStatus https://developer.apple.com/documentation/photos/phphotolibrary/1620745-authorizationstatus

+0

cosa è arrayOfPHAssets? Voglio eliminare un singolo video dall'album. Mi potete aiutare ? – Gaurav

1

Aggiunta di una risposta a una vecchia questione qui, perché ci viene spesso chiesto per la prevenzione Schermata come parte di una soluzione di Data Loss-Prevention (DLP). È possibile (a) registrarsi per le notifiche degli screenshot e (b) chiedere all'utente di cancellare quando si verifica, ma non c'è modo di farlo in modo silenzioso o segreto. Ecco un esempio completo di codice di lavoro:

func applicationDidBecomeActive(application: UIApplication) { 
    registerForScreenShotNotifications() 
} 

func registerForScreenShotNotifications() { 
    NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationUserDidTakeScreenshotNotification, object: nil, queue: NSOperationQueue.mainQueue()) { (notification) in 
     print("Yep they took a screenshot \(notification)") 

     let assetToDelete = self.getLastImage() 
     if let assetToDelete = assetToDelete 
     { 
      PHPhotoLibrary.sharedPhotoLibrary().performChanges({ 
       PHAssetChangeRequest.deleteAssets([assetToDelete]) 
       }, completionHandler: { (success, error) in 
        print("Success \(success) - Error \(error)") 
      }) 

     } 
    } 
} 

// NOTE : You should ask for permission to access photos before this 
func getLastImage() -> PHAsset? { 
    let fetchOptions = PHFetchOptions() 
    fetchOptions.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: true) ] 
    let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions) 
    let newestAsset = fetchResult.lastObject 

    return newestAsset as! PHAsset? 
} 

Il risultato è questo:

ScreenShot Remover Sample Code Result

Problemi correlati