最近项目中要做图片浏览的功能,特别学习一下iOS8以后的新框架Photos,有一些是自己实践出来的,还有一部分是踩在巨人的肩膀上得到的,由于资料比较多,此处就不一一列举了,希望巨人见谅
主要借鉴 : iOS8 Photos Framework
PHAsset:代表图像或视频对象;
PHCollection:代表图像或视频对象的集合,PHCollection是个基类,有PHAssetCollection和PHCollectionList两个子类,分别代表 Photos 里的相册和文件夹
-
localIdentifier
Photos 框架中的根类PHObject只有一个公开接口localIdentifier, 是对象唯一唯一标志符.可以直接使用localIdentifier属性对PHObject及其子类对象进行对比是否同一个对象。
-
PHAsset
代表照片库中的一个资源实体,可以理解为一张照片,可以得到图片的基本信息
EB7BB251-B7C1-4B8A-A0B9-0DFB021C7320.png
mediaType
: 资源类型
mediaSubtypes
: 更多的资源样式
pixelWidth 和 pixelHeight
: 资源大小creationDate
: 创建日期location
: 资源创建的地理位置duration
: 资源时长hidden
: 资源是否是隐藏资源favorite
: 资源是否被标记为喜欢representsBurst 和 burstIdentifier
: representsBurst 属性为 true,表示为连拍的资源 。 burstIdentifier,可以通过将这个值传入 fetchAssetsWithBurstIdentifier(...) 方法来获取这一连拍资源的更多的连拍图片。比较常用几个获取资源的方法
+ (PHFetchResult<PHAsset *> *)fetchAssetsInAssetCollection:(PHAssetCollection *)assetCollection options:(nullable PHFetchOptions *)options;
获取照片中某个相册文件中的所有资源
+ (PHFetchResult<PHAsset *> *)fetchAssetsWithMediaType:(PHAssetMediaType)mediaType options:(nullable PHFetchOptions *)options;
查找相册中指定类型的资源
+ (PHFetchResult<PHAsset *> *)fetchAssetsWithLocalIdentifiers:(NSArray<NSString *> *)identifiers options:(nullable PHFetchOptions *)options;
根据资源的id查找到相对应的资源
-
PHAssetCollection
PHAssetCollection代表Photos里的相册
typedef NS_ENUM(NSInteger, PHAssetCollectionType) {
PHAssetCollectionTypeAlbum = 1, //用户自定义相册
PHAssetCollectionTypeSmartAlbum = 2, //系统相册
PHAssetCollectionTypeMoment = 3, //按时间排序分组的相册
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
PHAssetCollectionSubtype 这个里面的枚举就比较多了,按照条件查询的更细化一点,如果没有具体要求PHAssetCollectionSubtypeAny 所有的类型,
localizedLocationNames
: 资源位置名称,这个属性只有在选择PHAssetCollectionTypeMoment的时候才会有值
estimatedAssetCount
: 估算的资源数量,不一定准确
approximateLocation
: 不是每个相册集合都有,测试了一下如果是PHAssetCollectionTypeMoment可以看到相册拍摄的大概地点,如下图:
网友评论