ios获取系统相册中的所有图片

在项目开发的空闲之余想自己做一个相册用于获取系统的图片,虽然很简单,但是也记录一下吧

首先苹果现在的相册类已经采用photo类库,原有的AssetsLibrary/AssetsLibrary类库在最新的版本无法使用。实现相册功能主要分为以下三步

第一:获取系统相册的图片

//获取所有资源的集合,并按资源的创建时间排序

    PHFetchOptions *options = [[PHFetchOptions alloc] init];

    options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];

   [[PhotoHelper photoServer].assetAry removeAllObjects];

   PHFetchResult *assetsFetchResults = [PHAsset

fetchAssetsWithOptions:options];

  for (PHAsset *asset in assetsFetchResults) {

       if (asset.mediaType == PHAssetMediaTypeImage) {

             [[PhotoHelper photoServer].assetAry addObject:asset];

       }

}

在此处我是定义了一个单例类PhotoHelper作为对图片的操做对象,苹果获取系统相册的图片貌似只能取照片流中的图片,至于是否能取其它相册暂时没有研究。此时注意不要直接对assetsFetchResults中图片进行处理后放入相册数组,会导致内存警告闪退。最好的方法是将PHAsset类对象存入数组

第二步:对图片进行压缩处理,此处碰到几个问题

PHImageRequestOptions *phImageRequestOptions = [[PHImageRequestOptions alloc] init];

phImageRequestOptions.synchronous = YES;          //强制同步执行

PHAsset *asset = [[PhotoHelper photoServer].assetAry objectAtIndex:indext];

[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFit options:phImageRequestOptions resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

[PhotoHelper photoServer].images = result;

}];

此处是将图片按照一定比例压缩后存入images数组,但是苹果提供的方法是调用了一个block。若要保证block内的方法一定要在图片压缩完成后调用则要将phImageRequestOptions.synchronous设置成YES强制同步执行

你可能感兴趣的:(ios获取系统相册中的所有图片)