我正在尝试使用Path's FastImageCache library来处理我的应用中的照片。他们提供的样本只是从磁盘读取图像。有谁知道如何修改它以从网址读取?在关于providing source images to the cache的部分中,他们有
- (void)imageCache:(FICImageCache *)imageCache wantsSourceImageForEntity:(id<FICEntity>)entity withFormatName:(NSString *)formatName completionBlock:(FICImageRequestCompletionBlock)completionBlock {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Fetch the desired source image by making a network request
NSURL *requestURL = [entity sourceImageURLWithFormatName:formatName];
UIImage *sourceImage = [self _sourceImageForURL:requestURL];
dispatch_async(dispatch_get_main_queue(), ^{
completionBlock(sourceImage);
});
});
}
有没有人之前使用过这个api并且知道如何从服务器获取源以传递到缓存?另一个仍然使用硬盘的例子是
- (void)imageCache:(FICImageCache *)imageCache wantsSourceImageForEntity:(id<FICEntity>)entity withFormatName:(NSString *)formatName completionBlock:(FICImageRequestCompletionBlock)completionBlock {
// Images typically come from the Internet rather than from the app bundle directly, so this would be the place to fire off a network request to download the image.
// For the purposes of this demo app, we'll just access images stored locally on disk.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *sourceImage = [(FICDPhoto *)entity sourceImage];
dispatch_async(dispatch_get_main_queue(), ^{
completionBlock(sourceImage);
});
});
}
答案 0 :(得分:2)
当我在Path时,我在Fast Image Cache上工作。快速图像缓存的关键部分是它是从磁盘上的图像数据到Core Animation渲染的绝对最快的方式。没有解码,您的应用程序不会将任何图像数据保存在内存中,也不会出现图像副本。
那就是说,你有责任弄清楚如何下载图像。下载图像没有什么特别之处。您可以使用NSURLConnection
或许多常用网络库之一(如AFNetworking)实际从服务器下载图像数据。获得该图像数据后,可以调用快速图像缓存的相关完成块,使其优化以供将来渲染。
如果您正在寻找一种简单的方式来下载图像并在完成后显示图像,那么请使用类似SDWebImage的内容。对于像这样的简单案例来说,它非常棒。如果您遇到性能瓶颈 - 特别是滚动 - 由于您的应用需要快速显示大量图像,那么快速图像缓存非常适合您。
答案 1 :(得分:0)
你的方法看起来很像懒人从URL加载图片,我必须这样做一旦我使用下面的库来做它,它将图像存储在磁盘中,但使用缓存的图像..下面是它的链接.. https://github.com/nicklockwood/AsyncImageView
答案 2 :(得分:0)
我将网络逻辑添加到我们的fork&gt; https://github.com/DZNS/FastImageCache#dezine-zync-additions-to-the-class
它使用NSURLSessionDownloadTasks,有几个配置选项(可选)。您需要做的就是创建一个DZFICNetworkController
的新实例,并将其设置为FICImageCache的sharedCache实例对象的委托。它会照照符合sourceImageURLWithFormatName:
的对象上的<FICEntity>
方法来下载图像。
我假设您在UITableView
或UICollectionView
中使用此功能,在imageCache上调用cancelImageRetrievalForEntity:withFormatName:
将取消下载操作(如果它仍处于运行中或尚未启动)。