我有一个表格视图,可以从网址加载标题和图片。由于我添加了图像,因此滚动并不平滑。我已经改变了背景以清除。图像分辨率低。我更喜欢使用网址访问它们,而不是下载图片并将其重新上传到应用上。期待您的解决方案,使滚动顺利。感谢
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TableCell" forIndexPath:indexPath];
NSString *str = [[feeds objectAtIndex:indexPath.row] objectForKey: @"title"];
[[cell textLabel] setNumberOfLines:0]; // unlimited number of lines
[[cell textLabel] setFont:[UIFont systemFontOfSize: 16.0]];
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
cell.TitleLabel.text=str;
UIImage *pImage=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:feeds2[indexPath.row]]]];;
[cell.ThumbImage setImage:pImage];
return cell;
}
答案 0 :(得分:1)
替换cellForRowAtIndexPath中的代码:
此行cell.TitleLabel.text=str;
这样你就可以在后台加载每个图像,加载后相应的单元格会在mainThread上更新。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
NSData *imgData = NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:feeds2[indexPath.row]]];
if (imgData) {
UIImage *image = [UIImage imageWithData:imgData];
dispatch_sync(dispatch_get_main_queue(), ^(void) {
UIImage *image = [UIImage imageWithData:imgData];
if (image) {
cell.ThumbImage.image = image;
}
});
});
更好的方法是缓存图像,因此每次都不需要下载它们,表格滚动。
这里有一些非常好的参考来完成这个。
答案 1 :(得分:1)
答案只是您必须使用NSOperation
来实现加载,其中有一个自定义类来处理您的下载并将NSOperationQueue
作为downloadQueue
。每个UITableView
都是(子类)UIScrollView
,因此您可以直接使用这些方法。
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[downloadQueue cancelAllOperations]; // clear your queue
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
// start download only for visible cells
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// start download only for visible cells
}
有关详细信息,请访问this教程。在那里,您可以找到满足您需求的良好解决方案。