Photos Framework 学习研究

文章转载于:https://www.jianshu.com/p/8cf7593cc44d

下面是阅读笔记

1、PHAsset 、PHAssetCollection、PHCollectionList是Photos框架中的模型类,PHAsset类型模型时图片或者视频文件数组;PHAssetCollection即图片或者视频文件的集合,包括相册moments、只能相册以及共享照片流

2、PHAsset对象的元数据是不可变的,修改元数据需要借助 PHAssetChangeRequest

3、Photos 框架中根类PHObject只有一个公开接口localIdentifier,是对象唯一唯一标志符。PHObject实现了isEqual和hash方法。可以直接使用localIdentifier属性对PHObject及其子类对象进行对比是否同一个对象

4、在我的模拟器中“最近删除”这个相册的localIdentifier为72053882-BF20-4D4A-B1A5-03D1DDAE1707/L0/040

5、PHAssetCollection

PHASsetCollection是一组有序的资源集合,包括相册、moemnts、智能相册以及共享照片流。

6、estimatedAssetCount估算的asset数量,不精确。

7、PHCollectionList

PHAsset、PHCollection、PHCollectionList有一系列类方法可供我们访问资源的元数据。

8、其中fetchAssetsInAssetCollection:options:方法可以获取资源集合中所有asset对象。每个方法中的PHFetchOptions参数,是获取asset对象的一些配置,我么可以设置获取asset条件,比如获取哪种资源,如何分类。获取的时候,如果该参数为空,则使用系统的默认值,当我们调用如下所示方法获取时,可以直接传nil.

9、PHFetchOptions

(1)predicate:做选择的约束条件,比如,只获取图片,不获取视频。指定PHAssetMediaType 为image

(2)sortDescriptors可指定字段用来对获取结果进行排序

(3)includeHiddenAssets获取结果是否包含被隐藏的资源

(4)includeAllBurstAssets获取结果是否包含连拍资源

10、PHFetchResult

类似数组,存储获取到asset对象集合

(1)同步快速获取结果

(2)即使结果集很大,框架也能保证获取速度,因为它不会一次性将所有结果放进内存

而是按需批量加载

(3)可以用类似NSArray的接口来访问PHFetchResutl结果内的集合。

比如:PHCollection *collection = smatAlbums[n];

11、创建PHAssetChangeRequest对象。想要修改资源,需要创建一个(1)PHAssetChangeRequest。然后你就可以修改创建日期,资源位置,以及是否将隐藏资源,是否将资源看做用户收藏等。此外,你还可以从用户的库里删除资源。类似得,若要修改资源集合或集合列表,需要创建一个PHAssetCollectionChangeRequest或PHCollectionLIstChangeRequest对象,然后你就可以修改集合标题,添加或者删除集合成员,或者完全删除集合。

(2)操作的请求都要求在PHPhotoLibrary的performChanges的changeBlock中执行

(3)如果有更新UI操作,需要遵守PHPhotoLibraryChangeObserver协议,实现photoLibraryDidChange(changeInfo:PHChange!)方法在photoLibraryDidChange中执行UI更新操作。

12、如果你需要对新建的资源做额外的修改,你可以用创建变化请求的placeholderForCreatedAsset属性,它会返回一个可用placeholder来替代”真实的”PHAsset引用, 这里没看懂

13、phphotoLibrary

系统中PHPhotoLibrary单例对象是用来维护用户照片库。当我们需要编辑资源对象元数据、资源内容、或者插入新的资源独享等。都可以借助通过PHPhotoLibray单例对象执行block,block创建我们指定的请求对象(比如PHAssetChangeRequest, PHAssetCollectionChangeRequest, PHCollectionChangeRequest对象)。photoLibraryDIdChange(changeInfo:PHChange!)中进行

14、phimageRequestOptions有以下几个重要的属性

synchronous:指定请求是否同步执行

resizeMode:对请求的图像怎么缩放

deliveryMode图像质量

normalizedCropRect用于对原始尺寸的图像进行裁剪,基于比例坐标。

15、phcachingImageManager

滚动一系列缩略图时,我们可以在可视区域前后维护一些数据缓存。

参考链接:

https://www.jianshu.com/p/1b110d0c6946

https://www.jianshu.com/p/42e5d2f75452

第二次学习:

@property (nonatomic, assign, readonly) BOOL canContainAssets;

是否能包含个体单元

@property (nonatomic, assign, readonly) BOOL canContainCollections;

是否能包含相册单元

@property (nonatomic, strong, readonly, nullable) NSString *localizedTitle API_AVAILABLE(macos(10.13));

PHCollection 衍生出来的PHAssetCollection 和  PHCollectionList是可以包含相册的。

另外:PHFetchResult这个PHCollection的详情

PHAsset 这个是相片或者视频的具体。

两个集合:一个是相片或者视频的集合;一个是相册的集合。

猜你喜欢

转载自blog.csdn.net/u014544346/article/details/88052925