2012-08-28 11 views
13

Estoy desarrollando una aplicación de fotos del iPhone, por eso es necesario crear un álbum independiente con un nombre "Mi álbum" en el rollo de la cámara y necesito para salvar mi imagen UIImageView con nombre personalizado, por ejemplo, "Mi Image.png" dentro de la nueva directorio creado.iPhone - ¿Cómo crear un álbum personalizado y dar nombres personalizados a las fotos en el rollo de la cámara mediante programación?

¿Cómo puedo hacer esto?

+0

hola ... ¿ha encontrado cómo dar un nombre personalizado a las imágenes? –

Respuesta

15

Puede crear un álbum de costumbre y añadir una imagen bastante fácil con estas líneas de código en iOS:

// Create the new album. 
__block PHObjectPlaceholder *myAlbum; 
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    PHAssetCollectionChangeRequest *changeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title]; 
    myAlbum = changeRequest.placeholderForCreatedAssetCollection; 
} completionHandler:^(BOOL success, NSError *error) { 
    if (success) { 
     PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[myAlbum.localIdentifier] options:nil]; 
     PHAssetCollection *assetCollection = fetchResult.firstObject; 

     [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
      PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image]; 

      // add asset 
      PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection]; 
      [assetCollectionChangeRequest addAssets:@[[assetChangeRequest placeholderForCreatedAsset]]]; 
     } completionHandler:^(BOOL success, NSError *error) { 
      if (!success) { 
       NSLog(@"Error: %@", error); 
      } 
     }]; 
    } else { 
     NSLog(@"Error: %@", error); 
    } 
}]; 
+3

que solo describe cómo establecer el nombre del álbum personalizado, ¿qué nombre de imagen personalizado? –

+1

Trabajando bien ... :) – sohil

+0

¿Alguien me puede ayudar con la versión de Swift 3? – Priyal

7

Se trabaja desde entonces iOS 5.0.
favor importar AssetsLibrary/AssetsLibrary.h

ALAssetsLibrary* libraryFolder = [[ALAssetsLibrary alloc] init]; 
[libraryFolder addAssetsGroupAlbumWithName:@"My Album" resultBlock:^(ALAssetsGroup *group) 
{ 
    NSLog(@"Adding Folder:'My Album', success: %s", group.editable ? "Success" : "Already created: Not Success"); 
} failureBlock:^(NSError *error) 
{ 
    NSLog(@"Error: Adding on Folder"); 
}]; 
-2

Puede probar mi método de abajo para Crear álbum para iOS 7 y el IOS 8

#define PHOTO_ALBUM_NAME @"AlbumName Videos" 
-(void)createAlbum{ 

// PHPhotoLibrary_class will only be non-nil on iOS 8.x.x 
Class PHPhotoLibrary_class = NSClassFromString(@"PHPhotoLibrary"); 

if (PHPhotoLibrary_class) { 


    // iOS 8..x. . code that has to be called dynamically at runtime and will not link on iOS 7.x.x ... 

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
     [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:PHOTO_ALBUM_NAME]; 
    } completionHandler:^(BOOL success, NSError *error) { 
     if (!success) { 
      NSLog(@"Error creating album: %@", error); 
     }else{ 
      NSLog(@"Created"); 
     } 
    }]; 
}else{ 
    [self.library addAssetsGroupAlbumWithName:PHOTO_ALBUM_NAME resultBlock:^(ALAssetsGroup *group) { 
     NSLog(@"adding album:'Compressed Videos', success: %s", group.editable ? "YES" : "NO"); 

     if (group.editable == NO) { 
     } 

    } failureBlock:^(NSError *error) { 
     NSLog(@"error adding album"); 
    }]; 
}} 
9

Desde el AssetsLibrary es obsoleta, por favor utilice la Photos marco en su lugar (iOS 8 y posterior).

// Deprecated! 
import AssetsLibrary 

// Swift 3.0 
let assetsLibrary = ALAssetsLibrary() 
assetsLibrary.addAssetsGroupAlbum(withName: "NewAlbum", resultBlock: { assetsGroup in 
    print(assetsGroup == nil ? "Already created" : "Success") 
}, failureBlock: { error in 
    print(error) 
}) 

Puede utilizar el objeto compartido PHPhotoLibrary para crear nuevas fotos, pero no se les puede dar nombres específicos, ya que va a trabajar con los activos que necesitan ser gestionado por el Photos.app. Cada activo tiene propiedades específicas. Puede buscar objetos, solicitar cambios, cargar activos/miniaturas y almacenar en caché, etc.

Para crear un álbum personalizado , utilice PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle:).

breve ejemplo:

// Swift 3.0 
func createPhotoLibraryAlbum(name: String) { 
    var albumPlaceholder: PHObjectPlaceholder? 
    PHPhotoLibrary.shared().performChanges({ 
     // Request creating an album with parameter name 
     let createAlbumRequest = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: name) 
     // Get a placeholder for the new album 
     albumPlaceholder = createAlbumRequest.placeholderForCreatedAssetCollection 
    }, completionHandler: { success, error in 
     if success { 
      guard let placeholder = albumPlaceholder else { 
       fatalError("Album placeholder is nil") 
      } 

      let fetchResult = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [placeholder.localIdentifier], options: nil) 
      guard let album: PHAssetCollection = fetchResult.firstObject else { 
       // FetchResult has no PHAssetCollection 
       return 
      } 

      // Saved successfully! 
      print(album.assetCollectionType) 
     } 
     else if let e = error { 
      // Save album failed with error 
     } 
     else { 
      // Save album failed with no error 
     } 
    }) 
} 

No se olvide de import Photos biblioteca.

Para crear un nuevo elemento de foto en ese álbum, utilice el PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle:).

// Swift 3.0 
func createPhotoOnAlbum(photo: UIImage, album: PHAssetCollection) { 
    PHPhotoLibrary.shared().performChanges({ 
     // Request creating an asset from the image 
     let createAssetRequest = PHAssetChangeRequest.creationRequestForAsset(from: photo) 
     // Request editing the album 
     guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: album) else { 
      // Album change request has failed 
      return 
     } 
     // Get a placeholder for the new asset and add it to the album editing request 
     guard let photoPlaceholder = createAssetRequest.placeholderForCreatedAsset else { 
      // Photo Placeholder is nil 
      return 
     } 
     albumChangeRequest.addAssets([photoPlaceholder] as NSArray) 
    }, completionHandler: { success, error in 
     if success { 
      // Saved successfully! 
     } 
     else if let e = error { 
      // Save photo failed with error 
     } 
     else { 
      // Save photo failed with no error 
     } 
    }) 
} 

ACTUALIZACIÓN:

Tenemos que solicitar el acceso a poder utilizar la biblioteca de Fotos:

PHPhotoLibrary.requestAuthorization { status in 
    switch status { 
    ... 
} 

A partir de IOS 10 y por encima también tenemos que añadir la entrada para el acceso en el archivo .Plist objetivo de "privacidad - Fototeca Uso Descripción":

<key>NSPhotoLibraryUsageDescription</key> 
<string>Access to photos is needed to provide app features</string> 
+0

Se da error con Swift 3 en la línea: "proteger dejar álbum = fetchResult.firstObject como ÁlbumDigital else { assert (falsa,? "FetchResult no tiene PHAssetCollection") }" Error: El uso de no declarados tipo PhotoAlbum. ¿Puede sugerir el cambio? – Priyal

+0

@Priyal intenta agregar 'typealias PhotoAlbum = PHAsset'. – ricardopereira

+0

Gracias! funcionó con PHAssetCollection :) – Priyal

Cuestiones relacionadas