Emi*_*mil 6 objective-c uitableview uiimage ios4
我有一个UITableView在我的应用程序中,我从中加载了几个图像NSDocumentDirectory.它可以工作,但是当向上和向下滚动时,应用程序似乎会冻结一点,很可能是因为主线程中提供了图像,有效地阻止了tableView滚动直到它被加载.我的问题是我不知道如何在以后加载它们,一个"延迟加载"功能,同时滚动.
这是用于加载图像的代码片段:
imagesPath = [NSString stringWithFormat:@"%@/images/", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];
if ([fileManager fileExistsAtPath:[imagesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%d.png", rowID]]]) {
UIImage *image = [[UIImage alloc] initWithContentsOfFile:[imagesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%d.png", rowID]]];
// If image contains anything, set cellImage to image. If image is empty, use default, noimage.png.
if (image != nil){
// If image != nil, set cellImage to that image
cell.cellImage.image = image;
}
[image release];
}
Run Code Online (Sandbox Code Playgroud)
什么是"延迟加载"每个单元格中的图像以避免在滚动中滞后的最佳方法?
看一下SDWebImage存储库.它提供了执行异步图像加载的所有功能.
更新
我刚刚注意到README中存在一些拼写错误,因此下载本地文件可能无法按预期工作.
这是一些示例代码.视图控制器有一个UIImageView插座,想要加载该image.jpg文件.它实现了SDWebImageManagerDelegate协议:
- (IBAction)loadImage:(id)sender {
SDWebImageManager *manager = [SDWebImageManager sharedManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *destPath = [documentsDirectory stringByAppendingPathComponent:@"image.jpg"];
NSURL *url = [NSURL fileURLWithPath:destPath];
UIImage *cachedImage = [manager imageWithURL:url];
if (cachedImage)
{
imageView.image = cachedImage;
}
else
{
// Start an async download
[manager downloadWithURL:url delegate:self];
}
}
- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image
{
imageView.image = image;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2547 次 |
| 最近记录: |