- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
大约 10% 的时间 PHImageManager.defaultManager().requestImageForAsset 在第一次返回有效但“降级”的 UIImage 后返回 nil 而不是有效的 UIImage。在 nil 信息中没有返回我可以看到的错误或其他线索。
这似乎发生在需要从 iCloud 下载的照片上,同时启用了 iCloud 照片图库和优化 iPad 存储。我试过更改选项、大小等,但似乎什么都不重要。
如果我在失败后重试 requestImageForAsset,它通常会正确返回 UIImage,但有时需要重试几次。
知道我可能做错了什么吗?或者它只是照片框架中的一个错误?
func photoImage(asset: PHAsset, size: CGSize, contentMode: UIViewContentMode, completionBlock:(image: UIImage, isPlaceholder: Bool) -> Void) -> PHImageRequestID? {
let options = PHImageRequestOptions()
options.networkAccessAllowed = true
options.version = .Current
options.deliveryMode = .Opportunistic
options.resizeMode = .Fast
let requestSize = !CGSizeEqualToSize(size, CGSizeZero) ? size : PHImageManagerMaximumSize
let requestContentMode = contentMode == .ScaleAspectFit ? PHImageContentMode.AspectFit : PHImageContentMode.AspectFill
return PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: requestSize, contentMode: requestContentMode, options: options)
{ (image: UIImage!, info: [NSObject : AnyObject]!) in
if let image = image {
let degraded = info[PHImageResultIsDegradedKey] as? Bool ?? false
completionBlock(image: photoBlock.rotatedImage(image), isPlaceholder: degraded)
} else {
let error = info[PHImageErrorKey] as? NSError
NSLog("Nil image error = \(error?.localizedDescription)")
}
}
}
最佳答案
我也刚刚经历过这个。通过我的测试,问题出现在启用了“优化存储”选项的设备上,并且存在于以下两种方法之间的差异:
[[PHImageManager defaultManager] requestImageForAsset: ...]
如果您的选项配置正确,这将成功获取远程 iCloud 图像。
[[PHImageManager defaultManager] requestImageDataForAsset:...]
此功能仅适用于驻留在手机内存中的图像或最近由您的应用在任何其他应用上从 iCloud 获取的图像。
这是我正在使用的工作片段 -bear with me Obj-c :)
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; //I only want the highest possible quality
options.synchronous = NO;
options.networkAccessAllowed = YES;
options.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *info) {
NSLog(@"%f", progress); //follow progress + update progress bar
};
[[PHImageManager defaultManager] requestImageForAsset:myPhAsset targetSize:self.view.frame.size contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *image, NSDictionary *info) {
NSLog(@"reponse %@", info);
NSLog(@"got image %f %f", image.size.width, image.size.height);
}];
针对 Swift 4 更新:
let options = PHImageRequestOptions()
options.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat
options.isSynchronous = false
options.isNetworkAccessAllowed = true
options.progressHandler = { (progress, error, stop, info) in
print("progress: \(progress)")
}
PHImageManager.default().requestImage(for: myPHAsset, targetSize: view.frame.size, contentMode: PHImageContentMode.aspectFill, options: options, resultHandler: {
(image, info) in
print("dict: \(String(describing: info))")
print("image size: \(String(describing: image?.size))")
})
关于ios - PHImageManager requestImageForAsset 有时会为 iCloud 照片返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31037859/
对于某些视频,requestImageForAsset 以 nil 的 UIImage 完成。对于其他视频,它工作正常,我还没有弄清楚为什么。 func createThumbnailForVideo
我正在使用图像选择器库来允许用户从他们的照片库中选择许多图像。它们以 PHAssets 数组的形式返回。然后,我想将所有 PHAssets 转换为 UIImages 并将它们写入应用程序的存储。 目前
在照片框架中,我正在尝试查看使用 PHImageManager 中的 RequestImageFor Asset 方法的教程。 这是一段代码: let asset:PHAsset = self
我有一个 UICollectionView 的问题,我认为我已经缩小到以下区域。问题是,当我在 UICollectionView 上调用重新加载时,会出现闪烁,加载 1 张图像,然后加载正确的图像。几
所以我使用 SwipeView 库 ( https://github.com/nicklockwood/SwipeView ) 来显示使用 iOS8 Photos 框架的图像。 但是,当我调用 req
所以,我遇到了一个奇怪(且令人沮丧)的问题。我正在循环访问图像选择器返回的一组资源: let manager = PHImageManager.defaultManager() let options
我正在使用 Photos 框架在 iOS swift 中处理图像。当我尝试使用 PHImageManager.defaultImanager().requestImageForAsset() 获取图像
我有一个展示照片库图像列表的收藏 View ,在选择时,我想获取最高质量的版本并提供一个 Controller 来裁剪它。 我的收藏 View 的调用工作正常:。 let options = PHIm
我尝试使用方法 requestImageForAsset 获取照片。使用选项: auto options = [PHImageRequestOptions new]; options.resizeMo
大约 10% 的时间 PHImageManager.defaultManager().requestImageForAsset 在第一次返回有效但“降级”的 UIImage 后返回 nil 而不是有效
我已经通读了最新的 iOS8 相框作品,我正在尝试从用户库中获取一些资源来显示。我让用户一次编辑 4 张图像。但正因为如此,我需要压缩图像,否则应用程序会崩溃。 我正在使用 PHImageManage
如问题所述,如果我在任何运行 iOS 9 或更高版本的设备上执行 RequestImageForAsset(在 iPhone 5s、6 和 6s Plus 上试过),当我尝试检索以 1:1 拍摄的照片
我正在尝试使用 UIPageViewController 显示图像,使用来自苹果的示例代码并将其替换为新的照片工具包:PHAsset https://developer.apple.com/libra
我是一名优秀的程序员,十分优秀!