首先列出我遇到的几个问题;
1、缩略图的问题
2、手机使用了iCloud 原图获取问题
第一问题:
对于缩略图的问题 我们使用PHImageRequestOptions 配置定制请求,返回裁剪过的图片
normalizedCropRect 设置剪裁的大小
options.resizeMode = PHImageRequestOptionsResizeModeExact;
文档这样定义 在设置 normalizedCropRect 的时候 必须定义 resizeMode = PHImageRequestOptionsResizeModeExact;
synchronous 属性是否同步 一般设置位异步的 防止线程阻塞
networkAccessAllowed 如果手机开启了iCloud 这个设置开启才能获取到原始图片。
deliveryMode 设置图片质量
第二个问题:
发现好多的应用都有这个问题。在开启icloud 的时候没法选取图片。
注明:以下的图片获取都旨在获取原始图片
如果你的手机开启了iCloud 并且你的照片同步到了云端。那么你如果想要获取原始图片就要从云端获取。
networkAccessAllowed 这个属性设置开启的话,如果本地没有原始图片的话,就从iCloud 上获取原始图片。关闭的话那就拿不到这张图片的原始图片。
synchronous 属性是否同步 。如果我们设置为异步(NO)的话(相册开发一般的都设置位异步) requestImageForAsset 请求会有两次回调。第一次返回一个低质量的图片,用于占位显示,第二次返回的是一个高质量的图(原图)。如果设置为同步的请求的话,就只有一次的回调,返回一个高质量的图(原图)
所以我们开发相册的时候使用异步获取,这样体验更好,当要预览大图的时候,我们可以模仿ios 系统的做法,异步请求第一次获取低质量的图片用于占位显示,然后加一个小巧的精度条来加载大图。
但是我们在选取图片的时候就要使用同步<你也可以在子线程中把这个任务加到同步队列中执行,这样的话你就可以加一个进度条等待>的方法中去做,为什么要这样做呢,这样就可以保证你选取的图是原图而不是模糊的低质量的图片了