快速,2维表视图

Nat*_*ies 1 iphone cocoa-touch core-animation quartz-graphics

我正在实现一个用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            |
+------------+--+---------------+-------+-------------------------+
Run Code Online (Sandbox Code Playgroud)

每个x标记单元格的中心,或标记放置在时间轴上的类别中的一条数据.单元格将包含单个文本标签.当按下细胞时,我需要知道按下了细胞.x轴将包含24个标记,并且将存在5到30行数据之间的任何位置.

目前,我已经使用3 main实现了它UIScrollViews; 一个在顶部,一个在侧面,然后是一个大的所有细胞.滚动大滚动视图时,它会更新顶部和侧面滚动视图的contentOffsets.这似乎工作得很好,而且非常直观.

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

我遇到了两个问题:

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

第一个问题的一些可能的天真解决方案:

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

有没有人对解决这个问题的最佳方法有任何高级别的意见?我以前没有处理过大量的数据/视图,所以任何输入都会非常感激.

Dan*_*ull 5

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

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

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

如果您需要任何帮助,请给我一个喊叫.我理解整个套件需要一些更好的记录.:)