如何在ipad上展示“画廊”?

时间:2010-09-13 13:11:57

标签: iphone ipad uiscrollview uiimageview bounds

我正在为ipad构建一个应用程序,它使用youtube api获取视频缩略图并将它们呈现在一个库中(就像ipad上的原生youtube应用程序一样)。基本上它只是UIScrollView上的一堆UIImageViews。现在的问题是,一次显示所有图像可能会导致应用程序因内存问题而崩溃,因此我们的想法是只保留可以看到的图像,并将其他图像写回文件。

我的问题是如何获得UIScrollView内容的确切“可见”区域边界。

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

观看WWDC 2010 Session 104 - 使用滚动视图设计应用程序。

答案 1 :(得分:2)

你看过AQGridView了吗?它专为这类事物而设计。

答案 2 :(得分:1)

当UIScrollView滚动时,您应检查内容偏移量(scrollView.contentOffset)并获取(例如)x值。有了它(并且取决于你的uiscrollview的宽度框架值),你应该能够知道用户正在做什么。尝试使用NSLog打印这些信息; - )

然后当你知道用户正在查看哪个“页面”时,你可以加载一些UIImageView。

祝你好运: - )

答案 3 :(得分:1)

layoutSubviews中,您可以获得当前可见的边界:

CGRect visibleBounds = [self bounds];

然后,您可以通过将其框架与visibleBounds进行比较来检查UIView(例如UIImageView)是否可见:

BOOL visible = CGRectIntersectsRect(visibleBounds,cellFrame);

只需检查每个可见视图,然后删除可见边界之外的视图。然后检查数据集中是否有可见的图像,但还没有视图。

您还应该重复使用UIViews而不是一直创建新的UIViews。只需在NSSet中对已删除的队列进行排队,然后在创建新集之前检查该集。

答案 4 :(得分:1)

这是一种不同的方法:

使用UITableView但调整属性使其看起来像常规滚动视图。 (基本上,每行包含几个缩略图,并删除行分隔符。)

当行离开屏幕时,视图将被回收,并且可以回收UIImageViews使用的内存。

请注意,这需要一些额外的工作来确切地知道用户按下了哪个缩略图,但这并不太难。我以前做过这个并使用tag属性来存储数组索引。它并不理想,但这是一个简单的黑客攻击。

请注意,这仅适用于您的桌子仅垂直滚动的情况。据我所知,你不能有一个水平滚动UITableView。