我正在使用UITableView显示用户在应用程序的Documents目录中保存的图像列表。图像很大,或多或少都是iPad屏幕的大小和分辨率。每次显示表格视图时,我都尝试使用此代码生成缩略图,但当然这样做需要很长时间,特别是如果保存了大量图像:
NSString *filePath = [_documentsDirectory stringByAppendingPathComponent:basicFileName];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:filePath], NULL);
if (!imageSource) // if no image available, we have a folder
{
cell.imageView.image = [UIImage imageNamed:@"FolderIcon"];
}
else
{
CFDictionaryRef options = (__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:
(id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform,
(id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageIfAbsent,
(id)[NSNumber numberWithFloat:kDefaultCellHeight], (id)kCGImageSourceThumbnailMaxPixelSize,
nil];
CGImageRef imgRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options);
UIImage *scaledDownImage = [UIImage imageWithCGImage:imgRef];
CGImageRelease(imgRef);
CFRelease(imageSource);
cell.imageView.image = scaledDownImage;
}
为了减少延迟,我试图想到一种方法,在用户第一次点击按钮以显示表格视图时,已经创建缩略图并将其存储在缓存中。我将缩略图创建移动到app delegate中的didFinishLaunchingWithOptions,并将它们保存到应用程序的Cache文件中。这需要更多的工作才能使它成为一个可靠而有效的解决方案,但我想到我可能在ImageIO中遗漏了一些能够有效处理这个问题而无需编写大量代码的东西。 ImageIO上的文档似乎没有包含很多细节。我是否可以只创建一次缩略图,然后将它们嵌入原始的PNG文件中以获取图像?或者是否有其他方法可以随时轻松缓存或存储这些缩略图以便快速访问?