PhotoKit的基本构成:
PHAsset:代表照片库中的一个资源,和ALAsset类似, 通过PHAsset可以获取和保存资源。
PHFetchOptions:获取资源时的参数,可以传nil,即使用系统默认值。
PHAssetCollection:PHCollection的子类,表示一个相册或者一个时刻,或者是一个智能相册。
PHFetchResult:表示一系列的资源结果集合,也可以是相册的集合,从PHCollection的类方法中获得。
PHImageManager:用于处理资源的加载,加载图片的过程带有缓存处理,可以通过传入一个PHImageRequestOptions控制资源的输出尺寸等规格
PHImageRequestOptions:控制加载图片时的一些参数
PhotoKit的机制
1.获取资源
示例代码
//筛选规则
PHFetchOptions * option =[[PHFetchOptions alloc]init];
//排序方式
option.sortDescriptors =@[[NSSortDescriptor sortDescriptorWithKey:@"modificationDate" ascending:NO]];
//列出所有相册智能相册
PHFetchResult * smartAlbums =[PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
// 列出所有用户创建的相册
// PHFetchResult *smartAlbums = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
for (int i=0; i<smartAlbums.count; i++) {
//获取一个相册
PHCollection * collection =smartAlbums[i];
if ([collection isKindOfClass:[PHAssetCollection class]]) {
//每一个相册(assetcollection)
PHAssetCollection * assetcollection =(PHAssetCollection *)collection;
//从每一个相册中获取到中真正的资源
//相册里多有资源(fetResult)
PHFetchResult * fetResult =[PHAsset fetchAssetsInAssetCollection:assetcollection options:nil];
if (fetResult.count>0) {
[assetArray addObject:fetResult];
[nameArray addObject:assetcollection.localizedTitle];
//获取封面图片,就是第一张图片
PHAsset *asset = (PHAsset *)fetResult.firstObject;
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
//默认的是异步加载,这里选择了同步 因为只获取一张照片,不会对界面产生很大的影响
options.synchronous = YES;
PHImageManager * manager =[PHImageManager defaultManager];
[manager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
[fsArray addObject:result];
}];
}
}
}