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

Iphone 如何使用Quartz在UIView上绘制子视图,iphone,uiview,quartz-graphics,Iphone,Uiview,Quartz Graphics,我正在iPad应用程序的UIView上生成并显示一个树结构。让我们调用视图ROOTVIEW。所有树节点也都是UIView,其中label和UIImage作为子视图。当从数据源生成节点时,它将为该节点生成UIView,并将其作为子视图添加到ROOTVIEW。但问题是,当树结构很大时,就像数千个节点一样,它会占用太多的内存 因为节点的视图在添加到ROOTVIEW后不会改变,所以我提出了一个解决方案:当我们获得节点的UIView时,我们不将其作为子视图添加到ROOTVIEW,而是在ROOTVIEW上绘

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

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


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

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

嗯,


Akshay

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

是的,这是正确的方法。只需在根图像视图上渲染单个视图,甚至视图树的一部分。
查看如何在此处执行此操作:

我知道这一点,但在我的应用程序中,要求用户可以查看整个树的概览,并放大和缩小以浏览树。哎哟。考虑把整个事情直接绘制到图形上下文(重写DRACORT),或者绘制到离线图像,并根据需要缩放该图像。如果您的树有数百个节点,您将如何显示概览?我建议你重新考虑你的UI设计。谢谢,我想这就是我想要的。但是我如何迭代地绘制图像呢?我只能考虑使用上述方法存储子视图生成的图像,并将其存储在根视图中。当要求显示根视图时,使用drawRect将所有图像绘制到根视图。但它也会占用太多内存。如何在生成子视图图像时将其绘制到根视图,然后丢弃图像altegother?renderInContext方法将整个视图的树渲染为单个图像。所以不需要使用drawRect。使用单个UIImageView作为根视图,然后要么将整个树渲染到其中并释放树,要么以迭代方式渲染每个视图,而不是将其添加到树中。或者,可以迭代添加由节点生成的图像。