• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何在 UITableView 中高效加载图片?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 17:50:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个包含大量图像的 UITableView

每个单元格将有 5 张图片,这些图片是从 Parse.com 随机加载的。

我现在的查询代码在 cellForRowAtIndexPath 中。

这会导致一些问题:

1.) 滚动表格时存在一些滞后/延迟。

2.) 现在由于某种奇怪的原因,图像没有显示在正确的位置。

3.) 每次滚动表格时,图像都会重新加载/更改。

我希望图像在此 UIView 上时“加载”一次,在正确的位置,并且滚动流畅。

处理这个问题的最佳方法是什么?

这是我如何加载图像的代码:

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath
{

    // set up the cell here

    // query and display random images from parse.com
    PFQuery * query = [PFUser query];
    [query whereKey"category" equalTo:self.cell.label.text];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

        if (error)
        {
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
        else
        {
            for (int i = 0; i < objects.count; i++)
            {
                self.profilePicObject = [objects objectAtIndex:i];

                int imgRandom = arc4random() % [objects count];

                self.randomProfilePicObject = [objects objectAtIndex:imgRandom];

                self.imageFile = [self.randomProfilePicObject objectForKey"imageFile"];
                NSURL * imageFileURL = [[NSURL alloc] initWithString:self.imageFile.url];
                NSData * imageData = [NSData dataWithContentsOfURL:imageFileURL];
                UIImage * aImage = [[UIImage alloc] initWithData:imageData];

                self.cell.profilePicOne.image = aImage;
            }
    }

    return self.cell;

}

编辑:

我正在使用 SDWebImage 并且表格现在可以平滑滚动并显示图像。

新问题:

图片加载到错误的单元格中。

我正在查询表并将标签文本与我的 Parse 表中的正确字符串匹配,并使用它来显示正确的图像。

最初,有些图像会加载到正确的单元格中,而有些则不会。

当我滚动时,图像会到处出现。

解决此问题的最佳方法是什么?

这是我设置单元格的方式:

static NSString * cellIdentifier = @"FilterSelectCell";

self.cell = (FilterSelectCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (self.cell == nil)
    {
        NSArray * nib = [[NSBundle mainBundle] loadNibNamed"FilterSelectCell" owner:self options:nil];
        self.cell = [nib objectAtIndex:0];

        self.cell.profilePicOne.clipsToBounds = YES;
        self.cell.profilePicOne.layer.cornerRadius = 20.0;

        self.cell.profilePicTwo.clipsToBounds = YES;
        self.cell.profilePicTwo.layer.cornerRadius = 20.0;

        self.cell.profilePicThree.clipsToBounds = YES;
        self.cell.profilePicThree.layer.cornerRadius = 20.0;

        self.cell.profilePicFour.clipsToBounds = YES;
        self.cell.profilePicFour.layer.cornerRadius = 20.0;

        self.cell.profilePicFive.clipsToBounds = YES;
        self.cell.profilePicFive.layer.cornerRadius = 20.0;
    }

    self.cell.label.text = [self.myArray objectAtIndex:indexPath.row];



Best Answer-推荐答案


最好的解决方案是使用图像缓存系统(例如 SDWebImage)来防止对同一图像进行重复的 Web 查询。它非常易于使用,并允许您在从 URL 下载图像数据时使用占位符加载图像。它还异步加载图像,因此您的 UI 不会被阻塞,并且会在您的应用程序过载之前从缓存中释放图像。您只需像这样加载图像,SDWebImage 就会发挥作用:

[self.cell.profilePicOne setImageWithURL:imageFileURL placeholderImage:[UIImage imageNamed"LOADING_IMAGE.png"]];

SDWebImage Repository

关于ios - 如何在 UITableView 中高效加载图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20895880/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap