现在的位置: 首页 > 综合 > 正文

ios 如何将图片保存至自定义分组

2017年10月22日 ⁄ 综合 ⁄ 共 2273字 ⁄ 字号 评论关闭

一般我们照片存储都是直接存储在相机胶卷中,调用下面的方法就可以了:

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

       但是如果我们想将图片存储到自定义的分组该怎么做呢,我查了一下ALAssetsLibrary的文档,发现没有相应的方法,好吧,google一下,发现了一篇文章:点击打开链接。

       作者的解决思路如下:

1.将图片先保存到相机胶卷中;

2.在相机胶卷中找到这个图片所创建的AlAsset;

3.将此AlAsset添加到你需要存放的自定义分组中。

 


      主要代码如下所示,注释也很清楚了:

保存照片至相册:

-(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)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]; 
} 

如何添加分组:

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

转载自:http://www.2cto.com/kf/201307/231293.html

抱歉!评论已关闭.