实现“iOS照片风格”平铺图像库的最佳方式

时间:2011-11-18 00:29:42

标签: objective-c cocoa-touch uitableview core-data photo-gallery

我有一个应用程序,基本上可用于从各种Web服务下载,上传和管理照片。

我希望图片列表视图看起来像iOS照片应用,但不太确定最佳方法是什么。

我在想我可以使用NSMutableArray和子类UIScrollView从头开始创建该功能但我真的很想使用NSFetchedResultsController,因为在Core Data中动态/异步更新/插入/删除了与图像相关的一些数据。

现在我已经设置了一些非常hacky的东西 我创建了一个单独的Core Data实体来保存每个托管对象中4张照片的关系,并通过它们创建了UITableView循环。然后,cellforrow委托将遍历每个表格单元格中的4张照片。这种方法很糟糕,因为很难动态删除和插入照片,每次更新时我都需要重建关系并重新加载表。

我看过其他一些库,但我真的想了解最简单有效的方法是什么。

4 个答案:

答案 0 :(得分:5)

如果您指的是平铺视图,则可以使用UITableViewUIScrollView复制平铺视图。如果你想侧面滚动,那么UIScrollView就是起点。

如果您希望它垂直滚动(我建议在iPhone上使用),请使用UITableView和自定义UITableViewCell

至于核心数据方面,您可能会出现这种错误,您正试图在核心数据中存储UI状态信息(单元格中有多少张照片)。核心数据不应该关心单元格中有多少图像。

的UITableViewCell

要使用UITableView,您需要创建一个包含所有图像的数组。然后,您可以通过将该数组除以每行的图像数来确定所需的行数。

从那里你应该继承UITableViewCell并传入4个图像以便绘制该单元格。然后,只需向自定义单元格添加4个UIImageView实例并设置图像即可。

的UIScrollView

对于滚动浏览,您为每个图片创建UIImageView,然后将其添加为UIScrollView的子视图。然后,您将设置每个UIImageView的框架,以便它们显示在网格中。

如果你发现你的图像数量超过你在内存中的数量,那么你将需要处理平铺,有效地关注用户滚动和填充的位置(通过移动屏幕外图像视图)用户向前滚动的边缘。这与你通过排队的单元格UITableView免费有效地获得同样的效果。

答案 1 :(得分:3)

我刚刚使用UITableView做了这件事 - 你过度思考它与关系。

对于我的解决方案,我创建了一个UITableViewCell子类,它有四个按钮作为属性。

在我的cellForRow方法中,我找出哪四个图像属于该行,然后为相应的按钮设置合适的图像。

我的图像位于视图控制器中的数组中。我在viewDidLoad中填充数组。每当我从managedObjectContext添加或删除图像时,我都会重新填充数组,然后重新加载tableview。重新加载tableview将适当地重新排列单元格中的图像。

滚动很顺利,我遇到的唯一缺点就是当我删除图像时,我希望图像能够动画到新的位置,但我不认为我能用这个设置来解决这个问题。

答案 2 :(得分:1)

我认为一个非常好的实现是AQGridView

它很容易扩展,有很好的重新排序(参见跳板演示),它重用了单元格。

如果你曾经实现过TableViewDelegate,你应该可以使用它。

答案 3 :(得分:0)

你应该看看Three20照片浏览器。该项目在github上。此外,还有一个很好的照片查看器教程here