HighQualityFormat 的 PHImageManager.requestImageForAsset 从不调用 resultHandler
Posted
技术标签:
【中文标题】HighQualityFormat 的 PHImageManager.requestImageForAsset 从不调用 resultHandler【英文标题】:PHImageManager.requestImageForAsset for HighQualityFormat never calls resultHandler 【发布时间】:2016-07-17 02:38:58 【问题描述】:我有一个展示照片库图像列表的收藏视图,在选择时,我想获取最高质量的版本并提供一个控制器来裁剪它。
我的收藏视图的调用正常工作:。
let options = PHImageRequestOptions()
options.networkAccessAllowed = true
PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: CGSize(width: 480, height: 640), contentMode:.AspectFit, options:options, resultHandler:(image, info)in
print("PhotosVC RECEIVED image size \(image!.size.width) x \(image!.size.height)")
cell.ImageView?.contentMode = UIViewContentMode.ScaleAspectFit
cell.ImageView?.image = image
)
resultHandler 被调用一次或多次 - 通常是两次,第一次返回 60x45,然后再次返回 480x360。
选择一个单元格后,不同的 ViewController 使用 HighQualityFormat 选项调用 requestImageForAsset:
let options = PHImageRequestOptions()
options.networkAccessAllowed = true
options.deliveryMode = PHImageRequestOptionsDeliveryMode.HighQualityFormat
let ret = PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: CGSize(width: 768, height: 1024), contentMode:.AspectFit, options:options, resultHandler:(image, info)in
print("RootVC RECEIVED image size \(image!.size.width) x \(image!.size.height)")
// stuff here - never called
)
当我在我的设备(iPad Mini Retina,ios 9.3.2)上运行此代码时,从未调用 resultHandler。 它确实在模拟器上被调用,100% 的时间。似乎是设备独有的错误,或特定于某些照片的错误(在设备上 100% 可重现)
我在这次通话中尝试了很多不同的变体;如果我删除了 deliveryMode = HighQualityFormat 约束,resultHandler 会以较低的分辨率成功调用多次。
欢迎任何想法或见解。
【问题讨论】:
尝试在后台线程上执行此操作,并将synchronous
设置为true
。 — 另外,请确保您等待的时间足够长;如果这是通过网络获取的图像,也许真的需要一段时间?
尝试将其放入 dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) ... ;不幸的是,仍然看到相同的行为,即 resultHandler 块中的代码永远不会执行,即使我等待了几分钟。
我开始怀疑这是否可能是我的 iPad 的问题 - 照片应用程序在以更高分辨率加载旧图像时出现问题,并且我正在拍摄的屏幕截图无法正常显示相机胶卷。打算研究这个角度。
就是这样 - 症状是照片应用程序/相机胶卷中没有出现新照片和屏幕截图,以及问题中描述的行为。设备的硬重置(家庭+锁定 15+ 秒)解决了这个问题。
【参考方案1】:
问题是我的测试设备状态不佳。
主要症状是使用 Apple 应用拍摄的新照片和屏幕截图没有出现在“相机胶卷”或“照片”应用中的任何位置。
设备上的硬重置(家庭+锁定 15 秒)解决了上述症状,现在按预期方式为 HighQualityFormat 调用了 resultHandler。
【讨论】:
干得好。您可能知道自己可以在 48 小时内接受自己的答案,而且您应该这样做。 我不能对此进行足够的投票。我花了几个小时试图修复突然不接受任何解决方案的工作代码。我也是这种情况,感谢您发布此答案以上是关于HighQualityFormat 的 PHImageManager.requestImageForAsset 从不调用 resultHandler的主要内容,如果未能解决你的问题,请参考以下文章