如何在uiimage缓存中使用sdimage?
Posted
技术标签:
【中文标题】如何在uiimage缓存中使用sdimage?【英文标题】:How to use sdimage in uiimage caching? 【发布时间】:2016-01-05 12:13:27 【问题描述】:用缓存和占位符处理或显示 UIImage?
我从堆栈交换中找到了一个答案,但它对我没有用,下面给出的链接:
Best way to cache images on ios app?
注意:我没有任何 URL,因为我得到了 PHIMAGE 资产库的图像对象。
【问题讨论】:
使用图片资源库时无需缓存。图像会在构建时复制到您的包中,因此它们始终存在。 你的图片在本地包或服务器中在哪里? 你在用PHImageManager吗? @rptwsthi,我的所有图片都在 iPhone 的照片库中。 @jasper 我正在使用 PHImagemanager。 【参考方案1】:您可以使用SDWebImage 显示和缓存图像非常简单。
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.image_url.com"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
【讨论】:
但是我没有任何 URL 我有一个 phimage 对象的图像所以我无法获得任何 URL【参考方案2】:您可以使用一个非常有用的库,名为SDWebImage
当您提供带有 sd_setImageWithURL
的有效 URL 时,SDWebImage 会自动缓存您的所有图像。所以下次调用它时,将使用缓存系统而不是重新下载图像。
在他们的 github 上的 UIImageView
中实现的示例:
// Here we use the new provided sd_setImageWithURL: method to load the web image
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
【讨论】:
但是我没有任何 URL 我有一个 phimage 对象的图像所以我无法获得任何 URL【参考方案3】:滚动表格时出现平滑所有图像的问题,但存在重新加载单元格的问题,而不是我解决了这个问题的缓存问题。
我从 PHAsset 框架提供的本地标识符中一张一张地获取图像并将该图像显示到单元格中。
参考代码:
PHFetchResult *savedAssets = [PHAsset fetchAssetsWithLocalIdentifiers:@[您的本地标识符] options:nil]; [savedAssets enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop)
//this gets called for every asset from its localIdentifier you saved
PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];
imageRequestOptions.synchronous = YES;
imageRequestOptions.deliveryMode = PHImageRequestOptionsResizeModeFast;
[[PHImageManager defaultManager]requestImageForAsset:asset targetSize:CGSizeMake(50,50) contentMode:PHImageContentModeAspectFill options:imageRequestOptions resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info)
NSLog(@"You get an image from result");
];
];
【讨论】:
以上是关于如何在uiimage缓存中使用sdimage?的主要内容,如果未能解决你的问题,请参考以下文章
在 Table View UIImage 中使用 SD_setImage 缓存