我有一个用户可以添加子视图的 UIView。我现在需要应用程序在第一个找到的打开位置为用户自动放置一个子视图。
如果要放置的子视图的框架不与任何其他子视图相交,则该位置被认为是打开的。
定位这个开放区域的计算不需要是即时的 - 它会在用户第一次进入场景时运行,此时它会保存该位置,就好像它是放置它的用户一样。
容器 UIView 将足够大,以始终有一个开放空间来放置子视图(用户可以添加的子视图数量有限)。
确定放置子视图的位置的最简单方法是什么?
我有一个用户可以添加子视图的 UIView。我现在需要应用程序在第一个找到的打开位置为用户自动放置一个子视图。
如果要放置的子视图的框架不与任何其他子视图相交,则该位置被认为是打开的。
定位这个开放区域的计算不需要是即时的 - 它会在用户第一次进入场景时运行,此时它会保存该位置,就好像它是放置它的用户一样。
容器 UIView 将足够大,以始终有一个开放空间来放置子视图(用户可以添加的子视图数量有限)。
确定放置子视图的位置的最简单方法是什么?
不太确定是否存在这样做的内置方法。但是您可以运行迭代循环并获取容器视图内所有视图的边界。根据读数,您将不得不计算开放空间。
我在回答这个问题时发布了对通常用于解决这类问题的算法的描述:Finding Largest Rectangle in 2D Array。使该解决方案适应您的问题相当容易。在那个问题中,填充的空间是在一个网格上,这使得确定前进扫描线的量更容易一些,你必须更加小心。另外另一个问题是寻找具有最大面积的空矩形,一旦找到第一个拟合,您就可以尽早退出算法。
当然,如果您所有的子视图大小相同,则解决方案几乎相同。
希望这可以帮助。