iPhone – Comment créer un album personnalisé et donner des noms personnalisés aux photos sockets à la camera par programmation?

Je développe une application photo iPhone, j'ai donc besoin de créer un album séparé avec un nom "Mon Album" dans le rouleau de camera et j'ai besoin de sauvegarder mon image UIImageView avec un nom personnalisé par exemple "Mon Image.png" dans le directory nouvellement créé .

Comment puis-je faire ceci?

Vous pouvez créer un album personnalisé et append une image assez facile avec ces lignes de code dans 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); } }]; 

Il travaillait depuis iOS 5.0.
Veuillez importer 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"); }]; 

Comme la AssetsLibrary est obsolète , utilisez plutôt la structure Photos (iOS 8 et AssetsLibrary ultérieures).

 // 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) }) 

Vous pouvez utiliser l'object PHPhotoLibrary partagé pour créer de nouvelles photos, mais vous ne pouvez pas leur donner de noms spécifiques car vous travaillerez avec des ressources devant être gérées par Photos.app . Chaque actif a des propriétés spécifiques. Vous pouvez récupérer des objects, requestr des modifications, charger et mettre en cache des actifs / vignettes, etc.

Pour créer un album personnalisé , utilisez PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: .

Bref exemple:

 // Swift 3.0 func createPhotoLibraryAlbum(name: Ssortingng) { 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 } }) } 

Ne pas oublier d' import Photos bibliothèque import Photos .

Pour créer un nouvel élément photo sur cet album, veuillez utiliser le 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 } }) } 

METTRE À JOUR:

Nous devons requestr l'access pour pouvoir utiliser la bibliothèque Photos:

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

À partir d'iOS 10 et plus, nous devons également append une input pour l'access dans le file .plist cible pour "Confidentialité – Description de l'utilisation de la photothèque":

 <key>NSPhotoLibraryUsageDescription</key> <ssortingng>Access to photos is needed to provide app features</ssortingng> 

Vous pouvez essayer Ma méthode ci-dessous pour créer un album pour iOS 7 et iOS 8

 #define PHOTO_ALBUM_NAME @"AlbumName Videos" -(void)createAlbum{ // PHPhotoLibrary_class will only be non-nil on iOS 8.xx Class PHPhotoLibrary_class = NSClassFromSsortingng(@"PHPhotoLibrary"); if (PHPhotoLibrary_class) { // iOS 8..x. . code that has to be called dynamically at runtime and will not link on iOS 7.xx ... [[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"); }]; }}