在iOS上的当前视图范围内查找可用空间

时间:2012-03-06 02:01:05

标签: ios5 uiscrollview uiimageview subview

我有一个无限的滚动视图,我在用户滚动时添加图像。这些图像具有不同的高度,我一直试图找到在视图的当前边界内找到一个清晰空间的最佳方法,这将允许我添加图像视图。

内置任何可以提高搜索效率的内容吗?

问题是我希望图像彼此粘在一起,它们之间没有空白。通过320x480像素进行搜索往往会占用大量CPU资源。有谁知道这样做的有效方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

看起来你正在垂直滚动这个东西(你提到了不同的图像高度)。

UIScrollView内置了任何内容,无法为您执行此操作。您必须手动跟踪UIImageView子视图。您可以在添加图像时简单地保持图像占用的最大y坐标。

您可以考虑使用UITableView,并在您的代理中实施非常自定义tableView:heightForRowAtIndexPath:。您可能需要对实际细胞做一些特殊的事情,但这似乎会让您的工作变得更容易。

此外,对于它的价值,您可能会找到一种方法来避免使您的解决方案无限。小心你的记忆足迹!如果事情失控,iOS将关闭您的应用程序。

更新

好的,现在我明白了你的目标。我曾想象你正在展示照片或类似矩形的东西。如果我试图用UILeaf s覆盖滚动视图(哇哇),我会采用统计方法。当用户滚动时,我会沿着水平/垂直条纹“绘制”叶子。也许那就是你已经在做什么了?无论你做什么,我认为它看起来不错。

现在我猜你问的原因是为了防止显示出来的小小的随机白点 - 是吗?如果我可以建议一个不同的解决方案:尝试将滚动视图的背景颜色设置为看起来很好的东西,如果它在这里和那里显示出来的话。

此外,我想到你可以使用一个更大的模板图像 - 已经有很好的叶子分布 - 在叶子的外部轮廓上都有透明度但是没有其他地方。然后你可以平铺这些,但重叠,以便alpha只显示到下面的叶子。您可以拥有许多这些图像,因此看起来并不明显。这将消除所有的不确定性,使您的退休非常有效。

另外,请考虑了解CoreAnimation(特别是CALayer)和CoreGraphics/Quartz 2D)。正确使用这些库可能会极大地提高渲染速度。

更新2:

如果您的图片都是150px宽,那么将您的滚动视图拆分为列并根据这些列添加/删除(如聊天中所述)。

祝你好运!