Photos.framework学习笔记

来源:互联网 发布:mysql employees 编辑:程序博客网 时间:2024/05/21 20:26

概述

iOS8.0中引入了新的框架Photos.framework取代AssetsLibrary进行用户照片库图片资源的获取
1. 导入Photos.framework
2. 调用该框架

#import <Photos/Photos.h>

框架结构初探

  • PHAsset: 代表照片库中的一个资源,用以提供资源的元数据。跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源
  • PHAssetCollection: 资源集合。表示一个相册或者一个时刻,或者是一个「智能相册(系统提供的特定的一系列相册,例如:最近删除,视频列表,收藏等等,如下图所示
  • PHFetchResult: 表示一系列的资源结果集合,也可以是相册的集合,从?PHCollection 的类方法中获得
  • PHImageManager: 用于处理资源的加载,加载图片的过程带有缓存处理,可以通过传入一个 PHImageRequestOptions 控制资源的输出尺寸等规格
  • PHImageRequestOptions: 如上面所说,控制加载图片时的一系列参数

PHImageManager照片加载

PHImageManager API Reference

请求图像

  1. 获取指定尺寸的图片API Reference
//  返回图片的尺寸为targetSize,提供更快的响应速度(因为一般图片的实际尺寸都会比目标尺寸来的大)。- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset                               targetSize:(CGSize)targetSize                              contentMode:(PHImageContentMode)contentMode                                  options:(PHImageRequestOptions *)options                            resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;

targetSize // 图像的尺寸定义
PHImageContentMode // 图像裁剪模式
PHImageRequestOptions // 图像管理器重新设置图像大小的配置

To serve your request more quickly, Photos may provide an image that is slightly larger than the target size—because such an image is already cached or because it can be generated more efficiently

该方法默认是异步执行。如果在后台线程中执行则可通过options属性中的synchronous属性设置为YES阻塞调用线程直到返回result Handler.
异步请求中,Photos可能会多次发消息给result handler。 首先会先调用handler block提供低分辨率的图片用于临时显示。直到高分辨率的图片就绪,则会再次发消息给result handler。而当ImageManager已经缓存原图时,则只会调用一次。 通过获取Info属性的PHImageResultIsDegradedKey 键可以判断图片是否为低分辨率。
Demo:

[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(200, 200) contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {        // info 字典提供了关于当前请求状态的信息        BOOL isLowQuality = [[info objectForKey:PHImageResultIsDegradedKey] boolValue];    }
  1. 获取原图API Reference
- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset                                      options:(PHImageRequestOptions *)options                                resultHandler:(void (^)(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info))resultHandler;

调用该方法则会获取原图,resultHandler中会返回imageData,与上一方法不同,只会调用一次回调。

23th,Sep,2016
r: 感觉这篇博客会比较长,每一块慢慢补了。

参考资料

Photos API Reference
Objc中国–照片框架
iOS 开发之照片框架详解
iOS8.0 使用Photos.framework对相册的常用操作

0 0
原创粉丝点击