我试图设置无限(水平)滚动滚动视图。滚动向前很容易 - 我已经实现了scrollViewDidScroll,并且当contentOffset接近结束时,我将scrollview内容做得更大,并将更多数据添加到空间中(我将不得不处理稍后会有的残缺效果) !)UIScrollView无限滚动
我的问题是滚动回来 - 计划是看我什么时候接近滚动视图的开始,然后当我确定内容更大时,将现有内容一起移动,将新数据添加到开始处然后 - 重要的是调整contentOffset,以便视图端口下的数据保持不变。
如果我慢慢地滚动(或启用分页),但是如果我快速地(甚至不是非常快!)它会变得疯狂!继承人的代码:
- (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.500000 1285.500000 1284.500000 1283.500000 1282.500000 1281.500000 1280.500000
然后,当PAGENUMBER < 4(我们正在接近获得开头): 4479.500000 4479.500000
Gr吃! - 但数字应该继续往下走的4,000秒,但接下来的日志条目阅读: 1278.000000 1277.000000 1276.500000 1275.500000 等....
从那里离开Continiuing!
只是为了记录在案,如果慢慢地滚动日志上写着: 1294.500000 1290.000000 1284.500000 1280.500000 4476.000000 4476.000000 4473.000000 4470.000000 4467.500000 4464.000000 4460.500000 4457.500000 等....
有任何想法吗????
谢谢
本。
小心,似乎'setContentOffset:动画:'取消当前的滚动,而不是'setContentOffset:'...'重写setContentOffset:在''的后裔UIScrollView'并调整偏移量(至少在iOS SDK 4.3上)。 – 2011-06-30 08:33:36
我注意到setContentOffset:animated:和setContentOffset:不幸地取消了滚动动画(iPad2 SDK 4.3)。 – 2011-10-03 12:28:23