gpt4 book ai didi

iphone - 如何告诉 UICollectionView 预加载更大范围的单元格?

转载 作者:可可西里 更新时间:2023-11-01 03:14:54 25 4
gpt4 key购买 nike

我有一个 UICollectionView,它显示从网络检索的图像。它们是异步下载的。

当用户快速滚动时,他们会看到占位符,直到单元格加载为止。看起来 UICollectionView 只加载可见的内容。

有没有一种方法可以说“ Collection View ,在上方和下方加载 20 个单元格”,以便在用户不滚动查看内容时加载更多单元格的可能性更高?

最佳答案

想法是让 VC 识别何时可能需要远程加载并启动它。唯一棘手的部分是保持正确的状态,这样您就不会触发太多。

假设您的收藏是垂直的,您想知道的条件是:

BOOL topLoad = scrollView.contentOffset.y < M * scrollView.bounds.size.height

或当

BOOL bottomLoad = scrollView.contentOffset.y > scrollView.contentSize.height - M * scrollView.bounds.size.height

换句话说,当我们距离内容边缘有 M 个“页面”时。但在实践中,这种情况会被过度触发,比如当你第一次加载时,或者如果你在 scrollViewDidScroll 上测试它,你不想为每个像素生成网络请求用户滚动。

因此,要使其正确,需要在 View Controller 中添加额外的状态。 vc 可以有一对 BOOL,如 topLoadEnabled、bottomLoadEnabled,它们在 View 准备好之前为 NO。然后,滚动委托(delegate)代码如下所示:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

// compute topLoad and bottomLoad conditions
if (topLoad && self.topLoadEnabled) [self startTopLoad];

底部类似。加载代码看起来像这样,抽象地说:

self.topLoadEnabled = NO;  // don't trigger more loading until we're done
[self.model getMoreTopStuff:^(NSArray *newStuff, NSError *error) {

// do view inserts, e.g. tableView.beginUpdates
self.topLoadEnabled = YES;
}];

底部的想法相同。我们希望模型自己获取(也许模型有图像 url)并缓存结果(然后模型有图像)。作为 View 的数据源, View Controller 被调用来配置 View 单元。我可以天真地向模型询问图像。该模型应回答获取的图像或占位符。

希望这是有道理的。

关于iphone - 如何告诉 UICollectionView 预加载更大范围的单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com