2012-08-26 15 views
9

Estoy trabajando en una aplicación de Iphone y puedo enumerar activos usando la biblioteca de Assets y cargarlos en una vista de tabla. El usuario puede eliminar una fila (una imagen/video) en la aplicación, pero ¿cómo ACTUALizo el álbum de fotos de Iphone directamente desde mi aplicación? De lo contrario, al actualizar, la vista de tabla volverá a cargar el elemento eliminado anteriormente.Eliminar un activo (foto o video) de IPhone en IOS

Respuesta

0

Posible duplicación de https://stackoverflow.com/a/11058934/300292. Respuesta simple: no puedes. La aplicación Fotos es el único lugar donde puede eliminar activos. Lo cual probablemente sea una buena cosa: no querría que ninguna aplicación de lo que sea que sea capaz de borrar todas sus fotos, ¿verdad?

+0

sólo quería estar seguro. Gracias. –

1

Tarde pero para otros usuarios ayudará.
Como sabemos, solo la aplicación de fotos puede eliminar imágenes. En tal situación, recuperé todas las imágenes de las fotos a través de alassets, las visualicé en una galería personalizada, le otorgué al usuario una opción para seleccionar múltiples imágenes de los activos para guardarlas en el directorio telefónico. A continuación, estoy usando mi galería de aplicaciones en lugar de la galería de fotos. He dado la opción en la aplicación para importar imágenes desde fotos a la galería de aplicaciones (que es una carpeta de directorio de documentos de imágenes) en cualquier momento en la aplicación.

15

en ios8 borrar fotos es posible usando las fotos Marco

Consulte la documentación de Fotos Marco

Para la eliminación de los activos se refieren a PHAssetChangeRequest

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

donde assets es una matriz de PHAsset objetos para ser eliminado

+

Para borrar colecciones se refieren 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

No estoy convencido de que una aplicación pueda eliminar activos de la biblioteca de fotos. Me gustaría ver un ejemplo. – coco

+0

qué ocurre si solo tengo la imagen y el identificador local de la imagen como "AF508E2B-6B00-4E26-8A2B-B160C74478A9/L0/001". entonces, ¿cómo eliminar la imagen del álbum personalizado en la galería? –

10

Como dijo Ted, esto es ahora posible en iOS 8 utilizando el servicio de fotos. Es bastante limpio en realidad. Debe enviar una solicitud de cambio a la fototeca. Aquí hay un ejemplo.

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

Asegúrate de haber importado fotos y obtenido la autorización del usuario. (Que probablemente lo hizo para mostrar la imagen ya)

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

+0

¿Qué es arrayOfPHAssets? Quiero eliminar un solo video del álbum. Me puedes ayudar ? – Gaurav

1

Adición de una respuesta a una vieja pregunta aquí, porque a menudo nos preguntan para la prevención de pantalla como parte de una solución de prevención de pérdida de datos (DLP). Puede (a) registrarse para recibir notificaciones de captura de pantalla y (b) solicitar al usuario que elimine cuando ocurra, pero no hay forma de hacerlo de manera silenciosa o secreta. Aquí está un ejemplo de código completo de trabajo:

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? 
} 

El resultado es este:

ScreenShot Remover Sample Code Result

Cuestiones relacionadas