代码之家  ›  专栏  ›  技术社区  ›  Nate

在UITableView中渐进式下载图像

  •  1
  • Nate  · 技术社区  · 15 年前

    我正在iPhone上开发,我在AppStore中看到图像在UITableView中逐步下载…我怎样才能实现呢? 我的想法是检测显示的内容(显示哪些单元格)并下载这些图像。我的问题是我不知道如何检测显示的细胞! 这是个好办法吗?

    最好的

    6 回复  |  直到 13 年前
        1
  •  3
  •   Jasarien    15 年前

    在iPhone开发者技术讨论会上演示的方法是使用 NSOperation NSOperationQueue .

    其思想是将您的图像下载请求(使用nsurlrequest)打包到nsOperation中。

    您可以将您的单元设置为当操作完成时由操作发送的回拨的接收器,以便将图像附加到单元(手动绘制或添加到图像视图)。

    基本上,在你的 cellForRowAtIndexPath 方法,告诉单元格开始图像下载,并让单元格创建一个nsOperation并将其添加到由表视图控制器或其他对象管理的操作队列中。

    队列将开始执行操作,并在完成操作后回拨每个单元。

    如果您愿意,您可以在单元格移到屏幕外时取消操作,这样您就不会浪费资源下载将被丢弃的图像,因为单元格将无法显示图像。

        2
  •  1
  •   corprew    15 年前

    这是 an example 如何实现Jasarien所说的基本理念。根据您的应用程序的需要,它可能已经足够了,并且通常是如何做到这一点的好例子。

        3
  •  1
  •   progrmr    15 年前

    我将把每个单元格实现为UITableViewCell的子类,然后重写 willMoveToWindow: method 在子类中。willmovetoWindow:当单元格视图在屏幕上可见或离开屏幕时调用(newwindow为零)。然后,每个单元可以对一个请求进行排队,以便在图像变为可见时加载它的图像(如果它离开屏幕,甚至可能取消它排队的请求)。

    顺便说一句,你可以使用 visibleCells property 以获取可见单元格的列表。

        4
  •  0
  •   choise    15 年前

    @贾萨里恩:回答很好

    或者,如果需要,可以使用three20项目。有一个TTTableViewController已经可以处理您想要的所有内容。您只需输入ImageView和Viola的URL即可。

    TT还将您的图像缓存到内存或磁盘上。

    查看捆绑在三个20 GitBub资源中的示例项目。这里有一个例子。

        5
  •  0
  •   rajesh    14 年前

    这就是所谓的LazyTableView…您可以从这里开始gt教程

    http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

        6
  •  0
  •   Rohit Wankhede    13 年前

    请通过这个链接,尝试集成懒惰的表视图加载,就可以实现输出。 http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ 在“下载”按钮的“单击方法”中更改ProgressiveImageDownloadViewController中的URL。