【发布时间】:2012-04-30 16:29:36
【问题描述】:
我正在创建一个 iOS 应用程序,它假设获取网站上存在的图像列表并将它们显示为屏幕上的图块(类似于显示照片库中的图像)。我可以在 UIImageView 中显示来自 URL 的单个图像,但是在显示来自网站的完整图像列表时,我一无所知。任何正确方向的帮助或任何有用的教程将不胜感激。
【问题讨论】:
-
图片有ID吗? (使用萤火虫或Opera Dragonfly检查)
我正在创建一个 iOS 应用程序,它假设获取网站上存在的图像列表并将它们显示为屏幕上的图块(类似于显示照片库中的图像)。我可以在 UIImageView 中显示来自 URL 的单个图像,但是在显示来自网站的完整图像列表时,我一无所知。任何正确方向的帮助或任何有用的教程将不胜感激。
【问题讨论】:
这个问题有两个部分。我会给你一个快速的答复。
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,您可以在其中放置所有图像。
【讨论】:
我会设置一个网络服务来抓取这个“列表”(假设您实际上没有对服务器的内部访问)。我建议使用 libcurl 和 PHP 来获得该列表。
http://www.sitepoint.com/own-web-service-php-xml-rpc/
然后吐出 JSON 格式的列表,并使用 iOS 可用的库对其进行解析:
(可能需要看看最近在 JSON 解析方面取得了哪些进展,我似乎记得这个特定主题在最近的历史中经历了一些变化)。
关于 libcurl 和 PHP 的官方文档:
http://php.net/manual/en/book.curl.php
(取自上述堆栈溢出问题):
iOS 5 的更新答案:
现在带有 NSJSONSerialization 的 iOS 原生支持 JSON,但在 在性能方面,它与 JSONKit 相比相形见绌。
我建议您使用 JSONKit 而不是 NSJSONSerialization。
【讨论】:
在谷歌浏览器中:
还有:
【讨论】: