我正在尝试从 PHAsset 获取缩略图以及其他一些信息。这是一个简化的代码片段。
对于我从相机胶卷中检索到的所有图像,请执行以下操作:
static func fetchAsset(asset: PHAsset)
{
if(asset.mediaType == PHAssetMediaType.Image){
let screenScale: CGFloat = UIScreen.mainScreen().scale
let imageSize = CGSize(width: 100 * screenScale, height: 100 * screenScale)
let options: PHImageRequestOptions = PHImageRequestOptions()
options.deliveryMode = PHImageRequestOptionsDeliveryMode.FastFormat
options.resizeMode = PHImageRequestOptionsResizeMode.Fast
options.synchronous = false
PHImageManager.defaultManager().requestImageForAsset(asset,
targetSize: imageSize,
contentMode: PHImageContentMode.AspectFill,
options: options,
resultHandler: { (result, info) -> Void in
if (result != nil && result!.scale == screenScale) {
var newItemImage = MyImage(isLocal:true)
if let fname = asset.valueForKey("filename") as? String{
newItemImage.fileName = fname
}
newItemImage.thumbnail = result
asset.requestContentEditingInputWithOptions(PHContentEditingInputRequestOptions()) { (contentEditingInput, info) -> Void in
//Get full image
let url = contentEditingInput!.fullSizeImageURL
newItemImage.url = url
}
//DO SOMWTHING WITH IMAGE
}else
{
//DO SOMWTHING ELSE
}
})
}
}
在这个阶段我有两个问题:
- 最重要的一个,但我想这是随之而来的。它需要太多的处理能力和从光盘读取。它在模拟器中运行良好。但是当我在具有 300-500 张图像的测试设备(iPhone 5、4S)上运行它时,它会冻结一两分钟,同时获取所有图像。我猜它会一一读取整个集合,调整它的大小并获取所有这些信息。有没有更简单的方法?就像使用 ALAsset 一样,我可以直接得到缩略图,它飞得很快。
- 由于某种原因,它做了两次工作。首先它给了我我想要的东西,小缩略图~ 60 * 40 或大约。一旦它给了我,几秒钟后它会进入另一个循环并开始检索更高分辨率的图像,比如 960 * 640 左右,这就是发生冻结的地方。我不确定为什么会这样,但确实如此。
对这两个问题的任何意见将不胜感激。