从网站获取图像列表并显示它

Posted

技术标签:

【中文标题】从网站获取图像列表并显示它【英文标题】:Getting a list of Images from a website and displaying it 【发布时间】:2012-04-30 16:29:36 【问题描述】:

我正在创建一个 ios 应用程序,它假设获取网站上存在的图像列表并将它们显示为屏幕上的图块(类似于显示照片库中的图像)。我可以在 UIImageView 中显示来自 URL 的单个图像,但是在显示来自网站的完整图像列表时,我一无所知。任何正确方向的帮助或任何有用的教程将不胜感激。

【问题讨论】:

图片有ID吗? (使用萤火虫或Opera Dragonfly检查) 【参考方案1】:

这个问题有两个部分。我会给你一个快速的答复。

1:下载图片列表

如果您可以完全控制您的网站,这可能与使用 +arrayWithContentsOfURL: 一样简单。请务必调度下载以避免阻塞 UI 线程。

NSURL *URL = self.URLOfImages;
dispatch_queue_t dispatch = dispatch_queue_create("fetch.images", NULL);
dispatch_async(dispatch, ^
    NSArray *images = [NSArray arrayWithContentsOfURL:URL];
    dispatch_async(dispatch_get_main_queue(), ^
        self.images = images;
    );
);
dispatch_release(dispatch);

注意:URL 必须返回 NSArray 期望的确切格式,并且 self.images 必须通知视图它需要重新加载自身,即。 [self.tableView reloadData].

如果您对 URL 的控制较少,则需要使用 NSURLRequest 之类的东西创建请求,使用 NSURLConnection 之类的东西获取数据,并从响应中解析出图像列表以创建图像数组。

在更复杂的场景中,会涉及到分页。这将只需要下载列表中的一部分,然后在需要更多图像时请求更多图像。

2:显示图片列表

这可以像使用 UITableView 和使用 UITableViewCellStyleDefault 样式的 UITableViewCells 一样简单,然后在每个单元格中设置 imageView 属性。

为了更好地查看图像,您可以编写使用从 UITableViewCell 子类化的自定义表格视图单元格。这将允许您使用图像的自定义位置并将图像的大小设置为您想要的任何大小。

在更复杂的场景中,您可以创建自己的自定义视图,其中包含一个 UIScrollView,您可以在其中放置所有图像。

【讨论】:

谢谢杰弗里,我不明白的一件事。完全控制网站是什么意思? 您能否在服务器上创建新的 URL,您能否控制从这些 URL 返回的内容类型、数据和格式。要使 +arrayWithContentsOfURL: 正常工作,您将需要 URL 以返回格式正确的 plist(请参阅:Understanding XML Property Lists)。返回的 plist 不能以任何方式包装、编码或转义。【参考方案2】:

我会设置一个网络服务来抓取这个“列表”(假设您实际上没有对服务器的内部访问)。我建议使用 libcurl 和 php 来获得该列表。

http://www.sitepoint.com/own-web-service-php-xml-rpc/

然后吐出 JSON 格式的列表,并使用 iOS 可用的库对其进行解析:

Native JSON support in iOS?

(可能需要看看最近在 JSON 解析方面取得了哪些进展,我似乎记得这个特定主题在最近的历史中经历了一些变化)。

关于 libcurl 和 PHP 的官方文档:

http://php.net/manual/en/book.curl.php

(取自上述堆栈溢出问题):

iOS 5 的更新答案:

现在带有 NSJSONSerialization 的 iOS 原生支持 JSON,但在 在性能方面,它与 JSONKit 相比相形见绌。

我建议您使用 JSONKit 而不是 NSJSONSerialization。

【讨论】:

另外请注意,如果您在设备上执行此操作,则必须将网站放入白名单,否则 iOS 将无法访问它。 谢谢。事实上,它在设备上不起作用。我曾尝试在互联网上搜索,但找不到任何关于如何将 URl 添加到白名单中的参考。你能指导我或指点我一些教程吗?【参考方案3】:

在谷歌浏览器中:

    导航到您要查看所有图片的页面 按 f12 选择“网络”标签 滚动浏览所有请求图像,这些是页面呈现的顺序。

还有:

    选择“应用程序”标签 在图片下,浏览图片列表

【讨论】:

以上是关于从网站获取图像列表并显示它的主要内容,如果未能解决你的问题,请参考以下文章

从手机图库中获取随机图片并在视图中显示

从 IMDb 获取即将上映的电影列表 [关闭]

基于文本获取图像并从 API react 显示

使用 php jquery ajax 从 mysql 获取图像并将它们显示在 DIV 内的 html 页面中

从数据库中获取照片并在列表视图中显示

Discord bot 从用户消息中获取照片