我正在考虑在iOS
. 树中一个节点持有的数据是一张图片和一个标签,一个节点最多可以有6个孩子。
目前,我有一个带有自定义布局的集合视图,我在遍历自制树时以编程方式计算每个节点的 x 和 y。
该解决方案有效,但几乎没有。随着我构建更多功能,我预计它会分崩离析。
我已经考虑在构建树后制作图像并仅使用图像视图,但我计划在分支上实现某种展开/折叠。我还需要一种方法来放大和缩小整个树,这对于集合视图来说似乎并不容易。
那里有更好的解决方案吗?
我正在考虑在iOS
. 树中一个节点持有的数据是一张图片和一个标签,一个节点最多可以有6个孩子。
目前,我有一个带有自定义布局的集合视图,我在遍历自制树时以编程方式计算每个节点的 x 和 y。
该解决方案有效,但几乎没有。随着我构建更多功能,我预计它会分崩离析。
我已经考虑在构建树后制作图像并仅使用图像视图,但我计划在分支上实现某种展开/折叠。我还需要一种方法来放大和缩小整个树,这对于集合视图来说似乎并不容易。
那里有更好的解决方案吗?
在 UIScrollView 中仅使用简单视图怎么样?
这样你可以:
UIView
这里我使用s
创建了一个示例项目: https ://github.com/crisisGriega/swift-simple-tree-drawer
这是一个快速的开发,所以有很多可以改进的地方,比如节点之间的线(连接器)的绘制方式。同样在此示例中,节点被添加到 aUIView
而不是 a UIScrollView
。但是您可以点击节点来显示/隐藏它的子节点。
考虑使用SpriteKit
而不是使用UIKit
组件。使用它创建动态树状布局并不容易,UICollectionView
您可以查看其数据源定义,它不是要对树数据进行建模,而是对平面列表数据进行建模。如果数据模型根本不同,一切都会变得难以进行。
使用SpriteKit
,您的每个节点对象都可以由一个SKSpriteNode
对象渲染。布局子节点由其父节点管理。您也可以使用物理引擎来自动定位节点,它还有一个额外的好处是可以用最少的 efferot 避免重叠。最后但同样重要的是,开箱即用地支持缩放和滚动SpriteKit
。