porque personas organizar orden las fototeca fotos eliminar desasociar como carrete cargan carga cambiar album iphone objective-c ios camera alassetslibrary

iphone - personas - iOS guarde la foto en un álbum específico de la aplicación



organizar carrete iphone (5)

Estoy creando una aplicación iOS 5. Quiero guardar una foto en el dispositivo.

Quiero guardar la foto en un álbum específico para mi aplicación, así que necesito crear el álbum y luego guardar las fotos en el álbum.

Sé cómo crear el álbum:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library addAssetsGroupAlbumWithName:@"MY APP NAME" resultBlock:^(ALAssetsGroup *group) { //How to get the album URL? } failureBlock:^(NSError *error) { //Handle the error }];

Quiero agregar fotos al nuevo álbum ahora, ¿cómo lo hago? ¡El código de muestra es muy apreciado!


Puede usar el siguiente código simplemente cambie el nombre del álbum:

__weak ALAssetsLibrary *lib = self.library; [self.library addAssetsGroupAlbumWithName:@"My Photo Album" resultBlock:^(ALAssetsGroup *group) { ///checks if group previously created if(group == nil){ //enumerate albums [lib enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *g, BOOL *stop) { //if the album is equal to our album if ([[g valueForProperty:ALAssetsGroupPropertyName] isEqualToString:@"My Photo Album"]) { //save image [lib writeImageDataToSavedPhotosAlbum:UIImagePNGRepresentation(image) metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { //then get the image asseturl [lib assetForURL:assetURL resultBlock:^(ALAsset *asset) { //put it into our album [g addAsset:asset]; } failureBlock:^(NSError *error) { }]; }]; } }failureBlock:^(NSError *error){ }]; }else{ // save image directly to library [lib writeImageDataToSavedPhotosAlbum:UIImagePNGRepresentation(image) metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { [lib assetForURL:assetURL resultBlock:^(ALAsset *asset) { [group addAsset:asset]; } failureBlock:^(NSError *error) { }]; }]; } } failureBlock:^(NSError *error) { }];



Para cualquiera que quiera hacer esto a partir de iOS 9, las cosas se han vuelto un poco más complicadas ya que ALAssetsLibrary está en desuso en favor de la nueva biblioteca de Fotos.

Aquí hay algunos códigos Swift para agregar UIImages a un nombre de álbum específico (creando el álbum si no existe), es posible que necesites hacer algunas refactorizaciones / optimizaciones para tus necesidades:

func insertImage(image : UIImage, intoAlbumNamed albumName : String) { //Fetch a collection in the photos library that has the title "albumNmame" let collection = fetchAssetCollectionWithAlbumName(albumName) if collection == nil { //If we were unable to find a collection named "albumName" we''ll create it before inserting the image PHPhotoLibrary.sharedPhotoLibrary().performChanges({ PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(albumName) }, completionHandler: {(success : Bool, error : NSError?) in if error != nil { print("Error: " + error!.description) } if success { //Fetch the newly created collection (which we *assume* exists here) let newCollection = self.fetchAssetCollectionWithAlbumName(albumName) self.insertImage(image, intoAssetCollection: newCollection!) } } ) } else { //If we found the existing AssetCollection with the title "albumName", insert into it self.insertImage(image, intoAssetCollection: collection!) } } func fetchAssetCollectionWithAlbumName(albumName : String) -> PHAssetCollection? { //Provide the predicate to match the title of the album. let fetchOption = PHFetchOptions() fetchOption.predicate = NSPredicate(format: "title == ''" + albumName + "''") //Fetch the album using the fetch option let fetchResult = PHAssetCollection.fetchAssetCollectionsWithType( PHAssetCollectionType.Album, subtype: PHAssetCollectionSubtype.AlbumRegular, options: fetchOption) //Assuming the album exists and no album shares it''s name, it should be the only result fetched let collection = fetchResult.firstObject as? PHAssetCollection return collection } func insertImage(image : UIImage, intoAssetCollection collection : PHAssetCollection) { //Changes for the Photos Library must be maded within the performChanges block PHPhotoLibrary.sharedPhotoLibrary().performChanges({ //This will request a PHAsset be created for the UIImage let creationRequest = PHAssetCreationRequest.creationRequestForAssetFromImage(image) //Create a change request to insert the new PHAsset in the collection let request = PHAssetCollectionChangeRequest(forAssetCollection: collection) //Add the PHAsset placeholder into the creation request. //The placeholder is used because the actual PHAsset hasn''t been created yet if request != nil && creationRequest.placeholderForCreatedAsset != nil { request!.addAssets([creationRequest.placeholderForCreatedAsset!]) } }, completionHandler: { (success : Bool, error : NSError?) in if error != nil { print("Error: " + error!.description) } } ) }


Para aquellos que buscan la respuesta de Eddy en Objective-C.

#import <Photos/Photos.h>

- (void)insertImage:(UIImage *)image intoAlbumNamed:(NSString *)albumName { //Fetch a collection in the photos library that has the title "albumNmame" PHAssetCollection *collection = [self fetchAssetCollectionWithAlbumName: albumName]; if (collection == nil) { //If we were unable to find a collection named "albumName" we''ll create it before inserting the image [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle: albumName]; } completionHandler:^(BOOL success, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error inserting image into album: %@", error.localizedDescription); } if (success) { //Fetch the newly created collection (which we *assume* exists here) PHAssetCollection *newCollection = [self fetchAssetCollectionWithAlbumName:albumName]; [self insertImage:image intoAssetCollection: newCollection]; } }]; } else { //If we found the existing AssetCollection with the title "albumName", insert into it [self insertImage:image intoAssetCollection: collection]; } } - (PHAssetCollection *)fetchAssetCollectionWithAlbumName:(NSString *)albumName { PHFetchOptions *fetchOptions = [PHFetchOptions new]; //Provide the predicate to match the title of the album. fetchOptions.predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"title == ''%@''", albumName]]; //Fetch the album using the fetch option PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:fetchOptions]; //Assuming the album exists and no album shares it''s name, it should be the only result fetched return fetchResult.firstObject; } - (void)insertImage:(UIImage *)image intoAssetCollection:(PHAssetCollection *)collection { [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ //This will request a PHAsset be created for the UIImage PHAssetCreationRequest *creationRequest = [PHAssetCreationRequest creationRequestForAssetFromImage:image]; //Create a change request to insert the new PHAsset in the collection PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection]; //Add the PHAsset placeholder into the creation request. //The placeholder is used because the actual PHAsset hasn''t been created yet if (request != nil && creationRequest.placeholderForCreatedAsset != nil) { [request addAssets: @[creationRequest.placeholderForCreatedAsset]]; } } completionHandler:^(BOOL success, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error inserting image into asset collection: %@", error.localizedDescription); } }]; }


Este artículo parece lograr lo que está buscando con una categoría ALAssetsLibrary personalizada. Parece que hay algunos comentarios útiles debajo del artículo que también pueden ayudar con el rendimiento.