gpt4 book ai didi

iphone - UIScrollView 无限滚动

转载 作者:行者123 更新时间:2023-12-03 18:21:55 25 4
gpt4 key购买 nike

我正在尝试设置一个具有无限(水平)滚动的 ScrollView 。

向前滚动很容易 - 我已经实现了scrollViewDidScroll,当contentOffset接近末尾时,我使scrollview内容大小更大,并向空间中添加更多数据(我将不得不处理稍后会产生的严重影响! )

我的问题是向后滚动 - 计划是查看何时接近 ScrollView 的开头,然后当我确实使内容大小变大时,移动现有内容,将新数据添加到开头,然后 -重要的是调整 contentOffset 以便 View 端口下的数据保持不变。

如果我缓慢滚动(或启用分页),这将非常有效,但如果我快速滚动(甚至不是很快!),它就会发疯!代码如下:

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

float pageNumber = scrollView.contentOffset.x / 320;
float pageCount = scrollView.contentSize.width / 320;

if (pageNumber > pageCount-4) {
//Add 10 new pages to end
mainScrollView.contentSize = CGSizeMake(mainScrollView.contentSize.width + 3200, mainScrollView.contentSize.height);
//add new data here at (320*pageCount, 0);
}

//*** the problem is here - I use updatingScrollingContent to make sure its only called once (for accurate testing!)
if (pageNumber < 4 && !updatingScrollingContent) {

updatingScrollingContent = YES;

mainScrollView.contentSize = CGSizeMake(mainScrollView.contentSize.width + 3200, mainScrollView.contentSize.height);
mainScrollView.contentOffset = CGPointMake(mainScrollView.contentOffset.x + 3200, 0);
for (UIView *view in [mainContainerView subviews]) {
view.frame = CGRectMake(view.frame.origin.x+3200, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
}
//add new data here at (0, 0);
}

//** MY CHECK!
NSLog(@"%f", mainScrollView.contentOffset.x);
}

当滚动发生时,日志显示:1286.5000001285.5000001284.5000001283.5000001282.5000001281.5000001280.500000

然后,当 pageNumber<4 时(我们即将开始):4479.5000004479.500000

太棒了! - 但数字应该会在 4,000 秒内继续下降,但接下来的日志条目显示:1278.0000001277.0000001276.5000001275.500000等等....

从中断处继续!

仅供记录,如果缓慢滚动,日志将显示:1294.5000001290.0000001284.5000001280.5000004476.0000004476.0000004473.0000004470.0000004467.5000004464.0000004460.5000004457.500000等等....

有什么想法吗???

谢谢

本。

最佳答案

我发现 Apple 提供了一个非常棒的示例应用程序,可以在 OP 中使用类似的想法来实现无限滚动。非常简单,最重要的是无撕裂

http://developer.apple.com/library/ios/#samplecode/StreetScroller/Introduction/Intro.html

每次在 UIScrollView 上调用 layoutSubviews 时,他们都会实现“内容重新排序”。

我所做的唯一调整是回收“平铺效果”,而不是扔掉旧瓷砖并分配新瓷砖。

关于iphone - UIScrollView 无限滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3430267/

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