【问题标题】:Fast, 2 Dimensional Table View快速的二维表视图
【发布时间】:2009-10-16 09:38:14
【问题描述】:

我正在实现一个用 2 轴显示表格信息的视图,但我开始遇到渲染所有单元格的性能问题。

视图看起来像这样:

+------------+-------------+------------+------------+------------+
|            |   12.00am   |   1.00am   |   2.00am   |   3.00am   |
+------------+---------+---+---+--------+--------+---+-+---+------+
| Category 1 |    x    |   x   |        x        |  x  | x |      |
+------------+---------+-------+-----+-----------+-----+---+------+
| Category 2 |         |      x      |             x              |
+------------+---------+-------+----+--+--------------------------+
| Category 3 |  |       x       |   x   |            x            |
+------------+--+---------------+-------+-------------------------+

每个x 都标记了一个单元格的中心,或位于时间轴上的某个类别中的一段数据。该单元格将包含一个文本标签。当单元格被按下时,我需要知道它被按下了。 x 轴将包含 24 个标记,并且会有 5 到 30 行数据。

目前,我使用 3 main UIScrollViews 实现了它;一个在顶部,一个在侧面,然后是一个大的,用于所有单元格。当滚动大滚动视图时,它会更新顶部和侧面滚动视图的 contentOffsets。这似乎工作得很好,而且很直观。

大滚动视图有许多行视图,与左侧边栏中的标题对齐。然后将单元格插入它们各自的行视图中,并在 x 轴上移动以相对于时间标记对齐。数据单元不一定与 x 轴的每小时时间增量精确对齐。

我遇到了两个问题:

  1. 似乎真的很慢。在其中一些表格中,最多可以有 2500 个单元格。这意味着我可能需要某种视图重用策略。
  2. 当两个单元格彼此相邻时,有一个 2px 的边框,但是当它是一个单独的单元格时,有一个 1px 的边框(每行和单元格视图的CALayer 都有一个 1px 的边框绘制)。李>

第一个问题的一些可能的幼稚解决方案:

  1. 为数据单元格创建一个大视图,将其放入主 UIScrollView 并使用 Quartz 绘制所有内容(可能在后台线程中)。
  2. 实施视图重用策略,并在用户快速滚动时处理空白区域。

是否有人对解决此问题的最佳方法有任何高层次的意见?我以前没有处理过大量的数据/视图,因此我们将不胜感激。

【问题讨论】:

    标签: iphone cocoa-touch core-animation quartz-graphics


    【解决方案1】:

    我创建了一个名为 DTGridView(作为DTKit 的一部分提供)的东西,专门用于这个目的(它是用于应用程序的电子编程指南)。因此,它允许像您在图表中显示的不同宽度的单元格。

    DTGridView 使用单个 UIScrollView 并计算所需的位置。它还实现了单元重用(与 UITableView 相同)。事实上,如果你知道如何使用表格视图,那么 DTGridView 非常相似;它使用 dataSource 来收集数据和视图,并提供委托方法(使用 gridDelegate 属性)来通知某些事件。

    DTKit 包含一个示例项目,它应该可以帮助您了解如何设置网格。

    如果您需要任何帮助,请大声告诉我。我了解整个套件需要更好的文档记录。 :)

    【讨论】:

    • 砰!刚刚检查了这个项目,它看起来很棒——正是我所追求的。不要担心缺少文档,这些示例应该足以让我领先一步。干杯,内森
    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 2016-12-30
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多