自定义相册逻辑
Photos.framework的使用理解
-
PHPhotoLibrary 是一个资源库。能够获取相册权限以及对相册的操作
-
PHAssetCollection是一个资源集合对象,相当于一个相册的概念,通过类方法可以获得想要的相册集合.
//获取最基本的智能分组
//得到的smartGroups,就是相册集合,通过遍历可以获得相册
PHFetchResult * smartGroups = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; -
PHFetchResult 是一个结果集,一个泛型类.通过方法获取到的相册或者资源组就是被封装成该类返回.通过遍历上述的smartGroups,可以得到PHAssetCollection的数组.
//array就是相册集合
NSMutableArray <PHAssetCollection > array = [NSMutableArray arrayWithCapacity:0];
//通过遍历smartGroups,将得到的PHAssetCollection放入一个数组中
[smartGroups enumerateObjectsUsingBlock:^(PHAssetCollection _Nonnull * obj, NSUInteger idx, BOOL * _Nonnull stop) {
[array addObject:obj];
}];
//遍历得到的数组,将"相册胶卷"排列到数组的第一个,(大多数需求需要其排列在第一个)
//PHAssetCollection对象的locaizedTitle等于Camera Roll,就是"相册胶卷"这个相册 -
根据PHAssetCollection(
group
)得到PHFetchResult对象,某个相册中的所有照片资源
//每一个PHAssetCollection对象相当于照片数组,通过将他转为PHFetchResult结果集,可以拿到每一个照片对象
PHFetchResult *result= [PHAsset fetchAssetsInAssetCollection:group options:[[PHFetchOptions alloc]init]] -
PHAsset 是一个独立的资源对象,可以通过类方法对PHCollection对象进行遍历,获得存放Asset对象的结果集,可以直接获得资源的规格数据,若想获得图片以及原图等资源,需要配合PHImageManager对象,继承自PHObject.
//对上述result对象根据下标取的PHAsset对象,取出PHAsset中的image对象
PHAsset *asset = (PHAsset *)[self.assets objectAtIndex:indexPath.row]
[[PHCachingImageManager defaultManager]requestImageForAsset:asset targetSize:newSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
//block回调,将image对象传出去
}];