文章转载于: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 这个是相片或者视频的具体。
两个集合:一个是相片或者视频的集合;一个是相册的集合。