iOS 开发: 将图片保存到自定义相册

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

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

 

解决思路如下:

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]; 

 

posted @ 2015-04-19 16:49  蔡-Rd  阅读(308)  评论(0)    收藏  举报