iOS的AssetsLibrary框架访问所有相片

该框架下有几个类,ALAssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation。

 

ALAssetsLibrary类

ALAssetsLibrary类可以实现查看相册列表,增加相册,保存图片到相册等功能。

例如enumerateGroupsWithTypes方法列举所有相册。

ALAssetsGroup

ALAssetsGroup就是相册的类,可以通过valueForProperty方法查看不同属性的值,如:ALAssetsGroupPropertyName,相册名

ALAssetsGroup类有几个方法,posterImage方法就是相册的封面图片,numberOfAssets方法获取该相册的图片视频数量,可以通过enumerateAssetsUsingBlock方法列举出所有照片

ALAssetsGroup 可以使用setAssetsFilter:(ALAssetsFilter *)filter过滤照片或者视频等。

  第一步获取相册:

首先是获取所有相册,通过ALAssetsLibrary的实例方法得到ALAssetsGroup类数组。

ALAssetsLibraryGroupsEnumerationResultsBlock resultsBlock = ^(ALAssetsGroup *group, BOOL *stop) {

        if (group)

        {

            [self.groupArray addObject:group];

            [self.nameArr addObject:[group valueForProperty:ALAssetsGroupPropertyName]];       //相册名

            [self.numArr addObject:[NSString stringWithFormat:@"%d",[group numberOfAssets]]];//相册的图片视频数量

            UIImage *Image = [[UIImage alloc]initWithCGImage:[group posterImage]];               //相册的封面图片

            [self.ImageArr addObject:Image];

            NSLog(@"self.ImageArr%@",Image);

        }

        else

        {

            [self.TableView reloadData];

        }

    };

    ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) {

        };

    

    // Enumerate Camera roll first

    [self.assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos

                                      usingBlock:resultsBlock

                                    failureBlock:failureBlock];

     // Then all other groups

    NSUInteger type =

    ALAssetsGroupLibrary | ALAssetsGroupAlbum | ALAssetsGroupEvent |

    ALAssetsGroupFaces | ALAssetsGroupPhotoStream;

    

    [self.assetsLibrary enumerateGroupsWithTypes:type

                                      usingBlock:resultsBlock

                                    failureBlock:failureBlock];

ALAsset类

ALAsset类也可以通过valueForProperty方法查看不同属性的值,如:ALAssetPropertyType,asset的类型,有三种ALAssetTypePhoto, ALAssetTypeVideo or ALAssetTypeUnknown。

另外还可以通过该方法获取ALAssetPropertyLocation(照片位置),ALAssetPropertyDuration(视频时间),ALAssetPropertyDate(照片拍摄日期)等。

可以通过thumbnail方法就是获取该照片。

第二步获取相册下的所有图片:

根据相册获取该相册下所有图片,通过ALAssetsGroup的实例方法得到ALAsset类数组。

 ALAssetsGroupEnumerationResultsBlock resultsBlock = ^(ALAsset *asset, NSUInteger index, BOOL *stop) {

        if (asset){

            UIImage *image=[UIImage imageWithCGImage: asset.thumbnail];//获取该相册的所有照片

            [self.imageArray addObject:image];

            NSLog(@"image%@",image);

//            NSString *type = [asset valueForProperty:ALAssetPropertyType];

//            

//            if ([type isEqual:ALAssetTypePhoto])

//                self.numberOfPhotos ++;

//            if ([type isEqual:ALAssetTypeVideo])

//                self.numberOfVideos ++;

        }

//        else if (self.assets.count > 0)

//        {

//            [self.tableView reloadData];

//            

//            [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:ceil(self.assets.count*1.0/columns)  inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

//        }

    };

    

    [self.group enumerateAssetsUsingBlock:resultsBlock];    //self.group   是指一个相册(也就第一步获取相册数组中的一个相册)

此博客是参考  http://my.oschina.net/u/1378445/blog/333052   方法和类分析的很到位,只是改了下代码,亲测可实现。

posted on 2015-10-21 15:22  我是一只野码  阅读(659)  评论(0)    收藏  举报

导航