菜鸟教程小白 发表于 2022-12-12 17:50:39

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


                                            <p><p>我有一个包含大量图像的 <code>UITableView</code>。</p>

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

<p>我现在的查询代码在 <code>cellForRowAtIndexPath</code> 中。</p>

<p>这会导致一些问题:</p>

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

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

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

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

<p>处理这个问题的最佳方法是什么?</p>

<p>这是我如何加载图像的代码:</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    // set up the cell here

    // query and display random images from parse.com
    PFQuery * query = ;
    ;
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

      if (error)
      {
            NSLog(@&#34;Error: %@ %@&#34;, error, );
      }
      else
      {
            for (int i = 0; i &lt; objects.count; i++)
            {
                self.profilePicObject = ;

                int imgRandom = arc4random() % ;

                self.randomProfilePicObject = ;

                self.imageFile = ;
                NSURL * imageFileURL = [ initWithString:self.imageFile.url];
                NSData * imageData = ;
                UIImage * aImage = [ initWithData:imageData];

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

    return self.cell;

}
</code></pre>

<p>编辑:</p>

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

<p>新问题:</p>

<p>图片加载到错误的单元格中。 </p>

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

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

<p>当我滚动时,图像会到处出现。 </p>

<p>解决此问题的最佳方法是什么? </p>

<p>这是我设置单元格的方式:</p>

<pre><code>static NSString * cellIdentifier = @&#34;FilterSelectCell&#34;;

self.cell = (FilterSelectCell *);

    if (self.cell == nil)
    {
      NSArray * nib = [ loadNibNamed:@&#34;FilterSelectCell&#34; owner:self options:nil];
      self.cell = ;

      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 = ;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>最好的解决方案是使用图像缓存系统(例如 SDWebImage)来防止对同一图像进行重复的 Web 查询。它非常易于使用,并允许您在从 URL 下载图像数据时使用占位符加载图像。它还异步加载图像,因此您的 UI 不会被阻塞,并且会在您的应用程序过载之前从缓存中释放图像。您只需像这样加载图像,SDWebImage 就会发挥作用:</p>

<pre><code>];
</code></pre>

<p> <a href="https://github.com/rs/SDWebImage" rel="noreferrer noopener nofollow">SDWebImage Repository</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 UITableView 中高效加载图片?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/20895880/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/20895880/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 UITableView 中高效加载图片?