gpt4 book ai didi

iphone - 在 UITableView 中缓存图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:32:46 25 4
gpt4 key购买 nike

我正在将图片加载到对应于单元格文本的表格 View 中,因此每张图片都是不同的。当用户向下滚动时,iOS 必须手动从 SSD 重新加载每个图像,因此滚动非常不稳定。如何缓存图像或防止需要重新创建表格 View 单元格?其他人通过使用 imageNamed: 解决了他们的问题,因为 iOS 会自动缓存您的图像,但我是从文档目录加载图像,而不是应用程序包。我应该怎么办?谢谢。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

// Return the number of sections.
return 1;

}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

// Return the number of rows in the section.
return [issues count];

}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

}


// Set up the cell...
NSDictionary *dic = [self.issues objectAtIndex:indexPath.row];

cell.text = [dic objectForKey:@"Date"];

cell.imageView.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/issues/%@/cover.png", documentsDirectory, [dic objectForKey:@"Directory Name"]]];

return cell;

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

return 150;

}

最佳答案

字典数组是您的模型,所以它是一个自然的地方。棘手的部分是让你的模型可变。您可以让您的模型在类中可变,或者在缓存图像时跳过箍。我推荐前者,但在此处对其进行编码以匹配您现有的代码...

- (UIImage *)imageForIndexPath:(NSIndexPath *)indexPath {

NSDictionary *dic = [self.issues objectAtIndex:indexPath.row];
UIImage *image = [dic valueForKey:@"cached_image"];

if (!image) {
image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/issues/%@/cover.png", documentsDirectory, [dic objectForKey:@"Directory Name"]]];
NSMutableDictionary *updatedDictionary = [NSMutableDictionary dictionaryWithDictionary:dic];
[updatedDictionary setValue:image forKey:@"cached_image"];
NSMutableArray *updatedIssues = [NSMutableArray arrayWithArray:self.issues];
[updatedIssues replaceObjectAtIndex:indexPath.row withObject:[NSDictionary dictionaryWithDictionary:updatedDictionary]];
self.issues = [NSArray arrayWithArray:updatedIssues];
}
return image;
}

第一次滚动列表时会起伏不定,然后会更平滑。如果您不想在第一次出现时出现问题并在 View 出现之前产生一点延迟,您可以提前遍历您的模型并强制加载:

for (int i=0; i<self.issues.count; i++) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
(void)[self imageForIndexPath:indexPath];
}

最后一件事 - 另一个解决方案是一个可变数组来匹配您的问题数组。这可能很好,但通常情况下,我很高兴在我的模型中包含了一些缓存计算。如果您发现自己在其他地方使用该问题数组,您会很高兴所有图像都得到妥善处理。

关于iphone - 在 UITableView 中缓存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9833260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com