我正在实现一个用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和5之间的任何位置。 30行数据。
目前,我已使用3个主UIScrollViews
实现了它;一个在顶部,一个在侧面,然后是一个大的所有细胞。滚动大滚动视图时,它会更新顶部和侧面滚动视图的contentOffsets。这看起来效果很好,而且非常直观。
大型scrollView有许多行视图,与左侧边栏中的标题对齐。然后将单元格插入它们各自的行视图中,并在x轴上移动以相对于时间标记对齐。数据单元不一定与x轴的每小时时间增量精确对齐。
我遇到了两个问题:
CALayer
和单元格视图都有1px边框绘制)。 第一个问题的一些可能的天真解决方案:
有没有人对解决此问题的最佳方法有任何高级别的意见?我以前没有处理过大量的数据/视图,所以任何输入都会非常感激。
答案 0 :(得分:5)
我创建了一个名为DTGridView的东西(作为DTKit的一部分提供),用于这个目的(这是一个应用程序的电子编程指南)。因此,它允许不同的单元格宽度,如图中所示。
DTGridView使用一个单独的UIScrollView并计算所需的位置。它还实现了单元重用(与UITableView相同)。事实上,如果您知道如何使用表视图,那么DTGridView非常相似;它使用dataSource来收集数据和视图,并提供委托方法(使用gridDelegate属性)来通知某些事件。
DTKit包含一个示例项目,可帮助您了解如何设置网格。
如果您需要任何帮助,请给我一个喊叫。我理解整个套件需要一些更好的记录。 :)