如何使用Quartz在UIView上绘制子视图

时间:2011-08-17 06:13:52

标签: iphone uiview quartz-graphics

我正在iPad应用中的UIView上生成并显示树状结构。让我们调用ROOTVIEW视图。所有树节点也都是UIViews,它有标签和UIImage作为子视图。当从数据源生成节点时,它将为节点生成UIView并将ROOTVIEW添加为子视图。但问题是,当树结构很大时,就像成千上万的节点一样,它会使用太多的内存。

因为添加到ROOTVIEW后节点的视图不会改变,所以我想出了一个解决方案:当我们得到节点的UIView时,我们不是将它作为子视图添加到ROOTVIEW,而是在ROOTVIEW上绘制它,并释放节点的UIView的。所以最后只有一个观点:ROOTVIEW。

我对Quartz不太熟悉,如何在UIView上绘制子视图?感谢。

3 个答案:

答案 0 :(得分:0)

您是否考虑过使用UITableView?我知道它不直接支持嵌套节点,但你仍然会更好地利用UITableViewController的功能,而不是实现一个完整的树形组件。您可以尝试自定义单元格以缩进以实现树状视觉效果。

HTH,

阿克沙伊

答案 1 :(得分:0)

除了使用UITableView的建议之外,您还可以考虑使用自己的树节点视图的缓存。这意味着您拥有一组树节点视图并回收它们 - 每当用户滚动时,显示不同的数据,但(几乎)显示相同数量的树节点。只需分配足够的树节点来填充可见区域,可能还有两到三个用于滚动边缘,每次用户滚动时,都会更新每个树节点中的数据。 UITableview中使用了相同的技术,它可以显示可以显示的数量的单元格(通常为14-20,具体取决于单元格高度),UITalbleView不会为表格中的行数分配单元格(可能是数百或数千!)

答案 2 :(得分:0)

是的,这是正确的方式。只需在根图像视图上渲染单个视图甚至部分视图树。 请参阅此处:Easy or efficient way to copy the bitmap representation from one view to another?