自定义相册逻辑

Photos.framework的使用理解

  • PHPhotoLibrary 是一个资源库。能够获取相册权限以及对相册的操作

  • PHAssetCollection是一个资源集合对象,相当于一个相册的概念,通过类方法可以获得想要的相册集合.
    //获取最基本的智能分组
    //得到的smartGroups,就是相册集合,通过遍历可以获得相册
    PHFetchResult * smartGroups = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

  • PHFetchResult 是一个结果集,一个泛型类.通过方法获取到的相册或者资源组就是被封装成该类返回.通过遍历上述的smartGroups,可以得到PHAssetCollection的数组.
    //array就是相册集合
    NSMutableArray > 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对象传出去
    }];

你可能感兴趣的:(自定义相册逻辑)