表格视图滚动与网址图像平滑

时间:2014-06-08 19:30:04

标签: ios objective-c uitableview uiimage

我有一个表格视图,可以从网址加载标题和图片。由于我添加了图像,因此滚动并不平滑。我已经改变了背景以清除。图像分辨率低。我更喜欢使用网址访问它们,而不是下载图片并将其重新上传到应用上。期待您的解决方案,使滚动顺利。感谢

    - (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;

}

2 个答案:

答案 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;
             }
        });
    });

更好的方法是缓存图像,因此每次都不需要下载它们,表格滚动。

这里有一些非常好的参考来完成这个。

LazyTableImages Reference

SDWebImage

UIImageView+AFNetworking

答案 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教程。在那里,您可以找到满足您需求的良好解决方案。