2012-08-28 19 views

cevap

15

iOS kod bu hatları ile oldukça kolay bir görüntü özel bir albüm oluşturabilir ve ekleyebilirsiniz: Bu iOS 5.0 beri gelen çalışıyordu

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

Sadece özel albüm adının nasıl ayarlanacağını açıklar, özel resim adı için ne? –

+1

Çalışıyor İyi ... :) – sohil

+0

Herhangi biri Swift 3 sürümünde bana yardımcı olabilir mi? – Priyal

7

. AssetsLibrary onaylanmıyor
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

iOS 7 için Albüm Oluşturma için My Yöntem aşağıda deneyebilirsiniz içe ve iOS Lütfen 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

beri Photos kullanın lütfen bunun yerine çerçeve (iOS 8 ve üstü).

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

Yeni fotoğraf oluşturmak için paylaşılan PHPhotoLibrary nesneyi kullanabilirsiniz ancak Photos.app tarafından yönetilmesi gerekir varlıkları ile çalışıyor olacak, çünkü bunları belirli isimler veremez. Her varlığın belirli özellikleri vardır.

Nesneleri getirebilir, değişiklikler yapabilir, öğe/küçük resim yükleme ve önbelleğe alma, özel albümü oluşturmak için lütfen PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle:) kullanın.

Kısa örnek:

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

import Photos kütüphaneye unutmayın.

Bu albümde bir yeni fotoğraf öğesi oluşturmak için lütfen PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle:)'u kullanın.

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

GÜNCELLEME: Biz Fotoğraflar kütüphanesini kullanmak edebilmek için erişim istemesi gerekir

: iOS 10 itibariyle yukarıda

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

biz de giriş eklemek gerekir "Gizlilik - Fotoğraf Kitaplığı Kullanım Açıklaması" için hedef .plist dosyasına erişim için:

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

Bu hat üzerinde Swift 3 ile hata veriyor: "{(FetchResult hiçbir PHAssetCollection vardır " , yanlış) assert}" olarak albüm = fetchResult.firstObject izin PhotoAlbum başka korumak?" Hata: bildirilmemiş Kullanımı PhotoAlbum yazın. Lütfen değişikliği önerebilir misiniz? – Priyal

+0

@Priyal 'typealias PhotoAlbum = PHAsset' eklemeyi deneyin. – ricardopereira

+0

Teşekkürler! PHAssetCollection :) – Priyal

İlgili konular