2012-08-28 10 views
13

मैं एक आईफोन फोटो एप्लीकेशन विकसित कर रहा हूं, इसलिए मुझे कैमरा रोल में "माई एल्बम" नाम के साथ एक अलग एल्बम बनाने की ज़रूरत है और मुझे अपने UIImageView छवि को कस्टम नाम से सहेजने की ज़रूरत है उदाहरण के लिए "My Image.png" बनाई गई निर्देशिकाआईफोन - एक कस्टम एल्बम कैसे बनाएं और प्रोग्राम रोल में कैमरे रोल में फोटो को कस्टम नाम दें?

मैं यह कैसे कर सकता हूं?

+0

हाय .. क्या आपको छवियों को कस्टम नाम देने का तरीका मिला है? –

उत्तर

15

आप एक कस्टम एल्बम एक छवि आईओएस में कोड की इन पंक्तियों के साथ बहुत आसान बना सकते हैं और जोड़ सकते हैं:

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

यह केवल वर्णन करता है कि कस्टम एल्बम नाम कैसे सेट करें, कस्टम छवि नाम के लिए क्या? –

+1

अच्छा काम कर रहा है ... :) – sohil

+0

क्या कोई मुझे स्विफ्ट 3 संस्करण के साथ मदद कर सकता है? – Priyal

7

यह iOS 5.0 के बाद से से काम कर रहा था।
कृपया आयात 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 के लिए एल्बम बनाएं और 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

के बाद से AssetsLibraryपदावनत है, Photos का इस्तेमाल करें इसके बजाय ढांचे (आईओएस 8 और बाद में)।

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

आप नई फ़ोटो बनाने के लिए साझा PHPhotoLibrary वस्तु का उपयोग कर सकते हैं, लेकिन आप क्योंकि आप संपत्ति Photos.app द्वारा प्रबंधित करने की आवश्यकता है के साथ काम कर रहे होंगे उन्हें विशिष्ट नाम नहीं दे सकता। प्रत्येक संपत्ति में विशिष्ट गुण होते हैं। आप वस्तुओं, अनुरोध परिवर्तन, संपत्ति/थंबनेल लोड हो रहा है और कैशिंग, आदि

लाने एक कस्टम एल्बम बनाने के लिए कर सकते हैं, PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle:) का इस्तेमाल करें।

संक्षिप्त उदाहरण:

// 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 पुस्तकालय मत भूलना।

उस एल्बम पर नई फोटो संपत्ति बनाने के लिए, कृपया 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 
     } 
    }) 
} 

अद्यतन:

हम पहुंच का अनुरोध करना फ़ोटो लाइब्रेरी का उपयोग करने में सक्षम होना चाहिए:

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

आईओएस 10 के रूप में और इसके बाद के संस्करण हम भी प्रविष्टि जोड़ने की जरूरत "गोपनीयता - फोटो लाइब्रेरी उपयोग विवरण" के लिए लक्ष्य .plist फ़ाइल में पहुंच के लिए:

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

यह लाइन पर स्विफ्ट 3 के साथ त्रुटि देता है: "गार्ड के रूप में जाने एलबम = fetchResult.firstObject PhotoAlbum else { ज़ोर (गलत?" FetchResult कोई PHAssetCollection है ") }" त्रुटि: अघोषित उपयोग की फोटोअल्बम टाइप करें। क्या आप परिवर्तन का सुझाव दे सकते हैं? – Priyal

+0

@Priyal 'typealias PhotoAlbum = PHAsset' जोड़ने का प्रयास करें। – ricardopereira

+0

धन्यवाद! यह PHAssetCollection के साथ काम किया :) – Priyal

संबंधित मुद्दे