你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> 如何將圖片保存至自定義分組

如何將圖片保存至自定義分組

編輯:關於IOS

 一般我們照片存儲都是直接存儲在相機膠卷中,調用下面的方法就可以了:

[plain]
void UIImageWriteToSavedPhotosAlbum ( 
   UIImage  *image, 
   id       completionTarget, 
   SEL      completionSelector, 
   void     *contextInfo 
); 

void UIImageWriteToSavedPhotosAlbum (
   UIImage  *image,
   id       completionTarget,
   SEL      completionSelector,
   void     *contextInfo
);
       但是如果我們想將圖片存儲到自定義的分組該怎麼做呢,我查了一下ALAssetsLibrary的文檔,發現沒有相應的方法,好吧,google一下,發現了一篇文章:點擊打開鏈接。

       作者的解決思路如下:

1.將圖片先保存到相機膠卷中;

2.在相機膠卷中找到這個圖片所創建的AlAsset;

3.將此AlAsset添加到你需要存放的自定義分組中。

 

      主要代碼如下所示,注釋也很清楚了:

[plain]
-(void)saveImage:(UIImage*)image toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock 

    //write the image data to the assets library (camera roll) 
    [self writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation  
                        completionBlock:^(NSURL* assetURL, NSError* error) { 
                               
                          //error handling 
                          if (error!=nil) { 
                              completionBlock(error); 
                              return; 
                          } 
 
                          //add the asset to the custom photo album 
                          [self addAssetURL: assetURL  
                                    toAlbum:albumName  
                        withCompletionBlock:completionBlock]; 
                           
                      }]; 

-(void)saveImage:(UIImage*)image toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock
{
    //write the image data to the assets library (camera roll)
    [self writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation
                        completionBlock:^(NSURL* assetURL, NSError* error) {
                             
                          //error handling
                          if (error!=nil) {
                              completionBlock(error);
                              return;
                          }

                          //add the asset to the custom photo album
                          [self addAssetURL: assetURL
                                    toAlbum:albumName
                        withCompletionBlock:completionBlock];
                         
                      }];
}
[plain]
-(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock 

    __block BOOL albumWasFound = NO; 
     
    //search all photo albums in the library 
    [self enumerateGroupsWithTypes:ALAssetsGroupAlbum  
                        usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
 
                            //compare the names of the albums 
                            if ([albumName compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) { 
                                 
                                //target album is found 
                                albumWasFound = YES; 
                                 
                                //get a hold of the photo's asset instance 
                                [self assetForURL: assetURL  
                                      resultBlock:^(ALAsset *asset) { 
                                                   
                                          //add photo to the target album 
                                          [group addAsset: asset]; 
                                           
                                          //run the completion block 
                                          completionBlock(nil); 
                                           
                                      } failureBlock: completionBlock]; 
 
                                //album was found, bail out of the method 
                                return; 
                            } 
                             
                            if (group==nil && albumWasFound==NO) { 
                                //photo albums are over, target album does not exist, thus create it 
                                 
                                __weak ALAssetsLibrary* weakSelf = self; 
 
                                //create new assets album 
                                [self addAssetsGroupAlbumWithName:albumName  
                                                      resultBlock:^(ALAssetsGroup *group) { 
                                                                   
                                                          //get the photo's instance 
                                                          [weakSelf assetForURL: assetURL  
                                                                        resultBlock:^(ALAsset *asset) { 
 
                                                                            //add photo to the newly created album 
                                                                            [group addAsset: asset]; 
                                                                             
                                                                            //call the completion block 
                                                                            completionBlock(nil); 
 
                                                                        } failureBlock: completionBlock]; 
                                                           
                                                      } failureBlock: completionBlock]; 
 
                                //should be the last iteration anyway, but just in case 
                                return; 
                            } 
                             
                        } failureBlock: completionBlock]; 

-(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock
{
    __block BOOL albumWasFound = NO;
   
    //search all photo albums in the library
    [self enumerateGroupsWithTypes:ALAssetsGroupAlbum
                        usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

                            //compare the names of the albums
                            if ([albumName compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) {
                               
                                //target album is found
                                albumWasFound = YES;
                               
                                //get a hold of the photo's asset instance
                                [self assetForURL: assetURL
                                      resultBlock:^(ALAsset *asset) {
                                                 
                                          //add photo to the target album
                                          [group addAsset: asset];
                                         
                                          //run the completion block
                                          completionBlock(nil);
                                         
                                      } failureBlock: completionBlock];

                                //album was found, bail out of the method
                                return;
                            }
                           
                            if (group==nil && albumWasFound==NO) {
                                //photo albums are over, target album does not exist, thus create it
                               
                                __weak ALAssetsLibrary* weakSelf = self;

                                //create new assets album
                                [self addAssetsGroupAlbumWithName:albumName
                                                      resultBlock:^(ALAssetsGroup *group) {
                                                                 
                                                          //get the photo's instance
                                                          [weakSelf assetForURL: assetURL
                                                                        resultBlock:^(ALAsset *asset) {

                                                                            //add photo to the newly created album
                                                                            [group addAsset: asset];
                                                                           
                                                                            //call the completion block
                                                                            completionBlock(nil);

                                                                        } failureBlock: completionBlock];
                                                         
                                                      } failureBlock: completionBlock];

                                //should be the last iteration anyway, but just in case
                                return;
                            }
                           
                        } failureBlock: completionBlock];
}

           作者寫了一個小demo:CustomAlbumDemo.zip 上面的代碼用到了ARC,如果你的工程沒有使用ARC,記得做相應處理。

      如何添加分組:

[plain]
[[DataCenter defaultAssetsLibrary] addAssetsGroupAlbumWithName:[alertView textFieldAtIndex:0].text 
                                                   resultBlock:resulBlock 
                                                  failureBlock:nil]; 

            [[DataCenter defaultAssetsLibrary] addAssetsGroupAlbumWithName:[alertView textFieldAtIndex:0].text
                                                               resultBlock:resulBlock
                                                              failureBlock:nil];

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved