zoukankan      html  css  js  c++  java
  • iOS 开发: 自定义相册, 保存多张图片到自定义相册中

    1、自定义相册(兼容 iOS7 iOS8)

    • - (void)viewDidLoad {
      //search all photo albums in the library
          [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *group, BOOL *stop)
           {
               //compare the names of the albums
               if ([@"九哒" compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) {
                   //target album is found
                   _isHaveAlbum = YES;
                   return;
               }
               if (group==nil && _isHaveAlbum == NO) {
                   //photo albums are over, target album does not exist, thus create it
                   //__weak ALAssetsLibrary* weakSelf = assetsLibrary;
                   
                   if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
                       // iOS 8 code
                       // Create new album.
                       [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                           [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"九哒"];
                       } completionHandler:^(BOOL success, NSError *error) {
                           if (!success) {
                               NSLog(@"Error creating album: %@", error);
                           }
                       }];
                   }
                   else {
                       // iOS 7.x code
                       //create new assets album
                       [assetsLibrary addAssetsGroupAlbumWithName:@"九哒" resultBlock:nil failureBlock: nil];
                   }
                   //should be the last iteration anyway, but just in case
                   _isHaveAlbum = YES;
                   return;
               }
           } failureBlock: nil]; }

      具体的解释我已经在上一篇博文(http://www.cnblogs.com/cai-rd/p/4432908.html)中解释, 这里就不多解释了, 上面代码需要补充一个变量 isHaveAblum = NO;

    2、把多张照片存入自定义的相册中

    • for(int i = 0; i < 9; i++){
      // 利用延时每隔0.1秒存入 一次
      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1*i * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                              [self saveImage:yourImage toAlbum:@"Rd" withCompletionBlock:^{
                                  NSLog(@"save s img success");
                              }];
      });
      
      }
      /**
       *  保存图片到相册中
       *
       *  @param image           <#image description#>
       *  @param albumName       <#albumName description#>
       *  @param completionBlock <#completionBlock description#>
       */
      -(void)saveImage:(UIImage*)image toAlbum:(NSString*)albumName withCompletionBlock:(void (^)(void))completionBlock
      {
          ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
          //write the image data to the assets library (camera roll)
          [assetsLibrary 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:(void (^)(void))completionBlock
      {
          
          ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
      
          __block BOOL albumWasFound = NO;
          
          //search all photo albums in the library
          [assetsLibrary 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
                  [assetsLibrary assetForURL: assetURL resultBlock:^(ALAsset *asset)
                   {
                       //add photo to the target album
                       [group addAsset: asset];
                                
                       //run the completion block
                       completionBlock();
                   } failureBlock: nil];
                     
                  //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 = assetsLibrary;
                  
                  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
                      // iOS 8 code
                      // Create new album.
                      [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                          [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"九哒"];
                      } completionHandler:^(BOOL success, NSError *error) {
                          if (!success) {
                              NSLog(@"Error creating album: %@", error);
                          }
                      }];
                  }
                  else {
                      // iOS 7.x code
                      //create new assets album
                      [assetsLibrary 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();
                            } failureBlock: nil];
                       } failureBlock: nil];
                      albumWasFound = YES;
                  }
                  
                  //should be the last iteration anyway, but just in case
                  return;
              }
          } failureBlock: nil];
      }

    3、需要引入的头文件

    • #import <AssetsLibrary/ALAsset.h>
      #import <AssetsLibrary/ALAssetsLibrary.h>
      #import <AssetsLibrary/ALAssetsGroup.h>
      #import <AssetsLibrary/ALAssetRepresentation.h>
      #import <Photos/Photos.h>

    ok~ 搞掂~ 有问题可以评论~ 一起探讨~

  • 相关阅读:
    VueBlog
    java 代理模式
    集合框架
    面试题
    java 多线程
    网络编程
    HTTP
    MAVEN
    Redis高级
    深入浅出--梯度下降法及其实现
  • 原文地址:https://www.cnblogs.com/cai-rd/p/4444612.html
Copyright © 2011-2022 走看看