【发布时间】: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 轴的每小时时间增量精确对齐。
我遇到了两个问题:
- 似乎真的很慢。在其中一些表格中,最多可以有 2500 个单元格。这意味着我可能需要某种视图重用策略。
- 当两个单元格彼此相邻时,有一个 2px 的边框,但是当它是一个单独的单元格时,有一个 1px 的边框(每行和单元格视图的
CALayer都有一个 1px 的边框绘制)。李>
第一个问题的一些可能的幼稚解决方案:
- 为数据单元格创建一个大视图,将其放入主 UIScrollView 并使用 Quartz 绘制所有内容(可能在后台线程中)。
- 实施视图重用策略,并在用户快速滚动时处理空白区域。
是否有人对解决此问题的最佳方法有任何高层次的意见?我以前没有处理过大量的数据/视图,因此我们将不胜感激。
【问题讨论】:
标签: iphone cocoa-touch core-animation quartz-graphics