一、PHAsset的基本概念
PHAsset是iOS上的一个类,代表着一个资源,例如图片或视频。它是Photos框架中的一个基本类,可以通过该类提取照片库中的资源
使用PHAsset需要进行以下几个步骤:
1、使用PHAssetCollection或PHFetchResult获取要操作资源的集合
2、从集合中获取对应的PHAsset对象
3、通过PHImageManager请求该资源的图像或视频,或者获取该资源的一些属性
下面是获取PHAsset的基本示例代码:
//获得照片库中所有内容为图片的资源 PHFetchOptions * fetchOptions = [[PHFetchOptions alloc] init]; fetchOptions.predicate = [NSPredicate predicateWithFormat:@"mediaType == %d", PHAssetMediaTypeImage]; PHFetchResult * fetchResult = [PHAsset fetchAssetsWithOptions:fetchOptions]; //获取第一个资源 PHAsset * asset = fetchResult.firstObject;
二、PHAsset的属性和方法
PHAsset有许多属性和方法提供了对资源的一些基本操作功能,常用的一些方法和属性如下:
1、PHAssetPropertyMediaType:获取资源的类型
2、PHAssetPropertyCreationDate:获取资源的创建时间
3、PHAssetPropertyModificationDate:获取资源的修改时间
4、location:获取资源的位置信息
5、requestContentEditingInputWithOptions:completionHandler::获取编辑该资源的输入内容,例如元数据和图片数据等
6、requestImageForTargetSize:contentMode:options:resultHandler::获取该资源的缩略图或全尺寸图像
7、requestAVAssetForVideo:options:resultHandler::获取该资源的AVAsset对象(仅适用于视频资源)
三、PHAssetCollection的使用
PHAssetCollection代表着一组资源,例如一个相册或一个智能相册。我们可以使用PHAssetCollection获取一组资源,也可以将资源添加或删除到该集合中。
以下是从PHAssetCollection中获取PHAsset对象的示例代码:
//获取所有相册 PHFetchResult * userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; PHFetchResult * customAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil]; //获取所有照片的集合 PHFetchResult * allPhotos = [PHAsset fetchAssetsWithOptions:nil]; //获取第一个相册的第一个资源 PHAssetCollection * album = userAlbums.firstObject; PHFetchResult * assets = [PHAsset fetchAssetsInAssetCollection:album options:nil]; PHAsset * asset = assets.firstObject;
我们还可以向PHAssetCollection中添加和删除资源:
//添加资源到相册 PHAssetCollectionChangeRequest *albumChangeRequest = [collectionChangeRequest addAssets:@[asset]]; //从相册中删除资源 PHAssetCollectionChangeRequest *albumChangeRequest = [collectionChangeRequest removeAssets:@[asset]];
四、PHFetchResult的使用
PHFetchResult是一个基于查询的结果集,它是由PHAsset或PHAssetCollection生成的。使用PHFetchResult可以对结果进行过滤和排序。
以下是获取筛选和排序结果的示例代码:
//获取第一页20个视频资源,按创建时间排序 PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; fetchOptions.fetchLimit = 20; fetchOptions.fetchOffset = 0; PHFetchResult *videosFetchResult = [PHAsset fetchAssetsWithOptions:fetchOptions]; //获取第二页20个视频资源 fetchOptions.fetchOffset = 20; PHFetchResult *videosFetchResult2 = [PHAsset fetchAssetsWithOptions:fetchOptions]; //将两个结果集合并 PHFetchResult *videosFetchResultAll = [PHFetchResult fetchResultWithObjects:@[videosFetchResult, videosFetchResult2]];
五、PHImageManager的使用
PHImageManager是一个单例类,它管理着一个或多个请求的资源的加载和取消。通过PHImageManager,我们可以异步获取照片库中所有的资源,例如缩略图、全尺寸图像或视频,同时还可以控制资源的大小、请求选项和缓存选项等。
以下是使用PHImageManager获取一个PHAsset的缩略图和全尺寸图像的示例代码:
//获取该资源的缩略图
PHImageManager *imageManager = [PHImageManager defaultManager];
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
options.resizeMode = PHImageRequestOptionsResizeModeFast;
[imageManager requestImageForAsset:asset targetSize:CGSizeMake(320, 480) contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
//处理图片
}];
//获取该资源的全尺寸图像
options.resizeMode = PHImageRequestOptionsResizeModeExact;
[imageManager requestImageDataForAsset:asset options:options resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
//处理数据
}];
六、总结
通过以上的分析,我们可以了解到PHAsset是iOS上一个非常重要的类,可以使用该类访问和处理照片库中的资源。使用PHAsset,我们可以获取资源的详细信息、访问资源的属性、获取资源的缩略图和全尺寸图像、编辑资源等。同时,PHAssetCollection和PHFetchResult也是我们常用的类,可以用来获取一组资源,对结果进行排序和过滤。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/243746.html
微信扫一扫
支付宝扫一扫